реклама на сайте
подробности

 
 
> Проблемма с AT91SAM9260 и IAR EWARM
rtcveel
сообщение Jun 27 2012, 07:16
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 27-06-12
Из: Самара
Пользователь №: 72 524



Доброго времени суток, уважаемые ГУРУ!

Решил в целях самообразования поработать с архитектурой отличной от класической MCS-51. Хотелось и частоты побольше и переферии, в общем выбор пал на микроконтроллер AT91SAM9260. Была куплена отладочная плата SK-AT91SAM9260 и JTAG программатор MT-LINK. Скачан и успешно вылечен IAR EWAVR версии 6.30. Казалось бы, ничего не предвещало проблемм но первый же блин оказался канечно же "комом", и не только первый.

В ступор встал после первой же простейшей программы, суть которой считывать логический уровень с 24 пина порта А и в зависимости от него включать или выключать светодиод на выходе 17 порта Б:

#include <AT91SAM9260/AT91SAM9260.h>

void main(void)
{
unsigned long a=1;

AT91C_BASE_PIOA -> PIO_PER = (0x1<<24); // PORTA.24 as PIO
AT91C_BASE_PIOA -> PIO_PPUER = (0x1<<24); // PORTA.24 PULLUP ON


AT91C_BASE_PIOB -> PIO_PER = (0x1<<17); // PORTB.17 as PIO
AT91C_BASE_PIOB -> PIO_OER = (0x1<<17); // PORTB.17 as OUTPUT
AT91C_BASE_PIOB -> PIO_OWER = (0x1<<17); // PORTB.17 Output Write Enable Registor
AT91C_BASE_PIOB -> PIO_CODR = (0x1<<17); // PORTB.17 = 0;

while(1){

a = (AT91C_BASE_PIOA->PIO_PDSR)&AT91C_PIO_PA24; // состояние ПИНа А.24

if (a){AT91C_BASE_PIOB->PIO_SODR = (1UL<17);} // если неравно нулю то PORTB.17 = 1;
if (!a){AT91C_BASE_PIOB->PIO_CODR = (1UL<17);} // если равно нулю то PORTB.17 = 0;
}

}

Сразу прошу прощения,что пользуюсь разными методами задания вывода, а именно (0x1<<17) или (1UL<17) или AT91C_PIO_PВ17 должно быть одно и тоже, насколько я понимаю...

Компляция проходит на "УРА", запускается дебаг, иар радостно сообщает что прошивка загружена по месту назначения и ... ничего не происходит, на обоих выводах висит +3.3 вольта, на нажатие кнопки не реагирует. Уже низнаю что и думать можт IAR обманывает? или отладчик? help.gif

Извиняюсь, опечатался: не (1UL<17) а (1UL<<17).
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rtcveel
сообщение Jun 27 2012, 08:34
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 27-06-12
Из: Самара
Пользователь №: 72 524



Проблемма с J-linkом решилась обновлением соотвестсующих драйверов, ПО и прошивки, код пошагово проходит, но часть кода в которой проверяется состояние ПИНа А.24 выполняется както не так%) и в выполняются условие что как будто в переменной а всегда 0.

a = (AT91C_BASE_PIOA->PIO_PDSR)&AT91C_PIO_PA24; // состояние ПИНа А.24


if (a){AT91C_BASE_PIOB->PIO_SODR = (1UL<17);} // если неравно нулю то PORTB.17 = 1;
if (!a){AT91C_BASE_PIOB->PIO_CODR = (1UL<17);} // если равно нулю то PORTB.17 = 0;
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th June 2025 - 23:11
Рейтинг@Mail.ru


Страница сгенерированна за 0.01359 секунд с 7
ELECTRONIX ©2004-2016