|
Не могу понять ATmega325, отладка в симуляторе AVRStudio, SPI |
|
|
|
 |
Ответов
(1 - 5)
|
Aug 4 2007, 06:23
|
Частый гость
 
Группа: Новичок
Сообщений: 81
Регистрация: 9-08-06
Пользователь №: 19 445

|
Цитата(korobov_michael @ Aug 4 2007, 11:43)  Поскольку SPDR используется как для записи, так и для чтения по SPI, AVR Studio не отображает его содержимого в окне просмотра регистров (как и в случае UART). Это наблюдается и c IAR. Самое правильное - сразу вычитывать его содержимое во временную переменную, а потом просматривать ее. Ко второму посту пара вопросов. 1. Почему после загрузки SPDR = STATUS_REGISTER_READ потом загружается еще и SPDR = 0x00? По даташиту SPDR выдаст содержимое статусного регистра уже после первой транзакции 2. Смущает как ты возвращаешь значение -- (t << 8 | f) дает в результате t, сдвинутую на 8|f == 0xA8 разрядов. Похоже, что даже для типа int несколько многовато. 3. Почему возвращаемый тип объявлен как unsigned int. Вроде бы достаточно unsigned char 1. самое интересное если не загрузить, в регистр SPDR = 0x00, тогда вообще нечего не получится, а так при загрузке устанавливается флаг регистр SPIF, SPSR, это вроде связанно с тем что буфер кольцевой и если что то нужно считать сначала нужно туда записать. 2. , 3. это упаковка двух восьми битных чисел в шестнадцати битное, при сдвиге в лево на восемь бит получаем 16 битное число, заполненное с право нулями т.е t=0xFF, тогда, возвращаемое значение = 0хFF00 и с этим числом операция "или" и значения в f т.е если f=0xA0, тогда (0xFF00 | f) = 0xFFA0
|
|
|
|
|
Aug 4 2007, 07:17
|
Частый гость
 
Группа: Свой
Сообщений: 118
Регистрация: 11-03-07
Из: Украина, Харьков
Пользователь №: 26 059

|
Цитата(Alex ma @ Aug 4 2007, 09:23)  1. самое интересное если не загрузить, в регистр SPDR = 0x00, тогда вообще нечего не получится, а так при загрузке устанавливается флаг регистр SPIF, SPSR, это вроде связанно с тем что буфер кольцевой и если что то нужно считать сначала нужно туда записать. 2. , 3. это упаковка двух восьми битных чисел в шестнадцати битное, при сдвиге в лево на восемь бит получаем 16 битное число, заполненное с право нулями т.е t=0xFF, тогда, возвращаемое значение = 0хFF00 и с этим числом операция "или" и значения в f т.е если f=0xA0, тогда (0xFF00 | f) = 0xFFA0 Во-первых, приношу извинения - спросонья не въехал - запись второго пустого (dummy) байта при первом чтении нужна -- информация о значении статусного регистра идет только вторым байтом По второму пункту - ок. Но опять же, еще (хи-хи) сам Страуструп рекомендовал не жадничать на скобки ((t << 8) | f). Несколько озадачило все же, что при последовательном чтении этого регистра ты получал разные значения, причем изменения были не только в бите статуса, но и в бите PROTECT, и, что еще непонятнее, в битах, определяющих объем флешки. Это довольно странно
|
|
|
|
|
Aug 4 2007, 11:07
|
Частый гость
 
Группа: Новичок
Сообщений: 81
Регистрация: 9-08-06
Пользователь №: 19 445

|
Дааа моя проблема оказалась в перемычке между выводом 5 и переходным отверстием, маааааленькая такая, но все портила, сейчас все нормально регистр статуса читается вот картинка из P-CADa платы
Эскизы прикрепленных изображений
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|