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

 
 
> Проблемма с 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
Ответов (1 - 7)
Lotor
сообщение Jun 27 2012, 07:20
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



С этим контроллером не работал, но возможно там в модуле управления питания надо включить нужные порты ног.
Если есть JTAG, то что мешает пройти по шагам стартовый код и узнать доходите ли до main.
Самый лучший способ - в ИАРе найти пример под Ваш МК и сделать на его основе.


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post
rtcveel
сообщение Jun 27 2012, 08:01
Сообщение #3


Участник
*

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



Да я бы рад, только в режиме симулятора пошагово программа проходится, а как только в настройках переключаюсь на J-Link/J-Trace, дебаггинг запускается, но и на брейкпоинты в тексте "С" ругается "One or more brekepoints could not to be set" и в дизассемблере прыгает между двух строчек (если код запускается сразу как Run):

0x355d20 SUBS R0, R0, #1
0x355d24 BHI 0x355d20

Если в опциях J-Link/J-Trace не ставить галочку Run to "main", что, как я понимаю, означает пошагово пройтись с начала программы, то при нажатии на Step или подобные кнопки меню вылазиит ошибка "Filed to read current instruction. Abort debug session?" поэтому пройтись пошагово JTAGoм не получается поэтому и думаю, где косяк, в прграмме, программаторе или компиляторе %)
Go to the top of the page
 
+Quote Post
Lotor
сообщение Jun 27 2012, 08:29
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



Может более опытные товарищи по конкретно этому МК подскажут. Могу лишь посоветовать разобраться из какой памяти настроен (внешними пинами) запускаться контроллер.


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post
rtcveel
сообщение Jun 27 2012, 08:34
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 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
Lotor
сообщение Jun 27 2012, 09:01
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



Цитата(rtcveel @ Jun 27 2012, 12:34) *
Проблемма с J-linkом решилась обновлением соотвестсующих драйверов, ПО и прошивки, код пошагово проходит, но часть кода в которой проверяется состояние ПИНа А.24 выполняется както не так%) и в выполняются условие что как будто в переменной а всегда 0.

Если решена проблема с джитагом и можно шагать по коду, что тогда мешает узнать действительное значение Вашей переменной после считывания кнопки.


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post
rtcveel
сообщение Jun 27 2012, 09:24
Сообщение #7


Участник
*

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



Тема исчерпана, косяк нашёл rolleyes.gif Как написал уважаемый Lotor, (за что ему большое спасибо) действительно необходимо включить некий особый бит называемый PMC_PCER или Peripheral Clock Enable Register, без него порты ввода/вывода работать отказываются. Вот финальная версия инициализации:

unsigned long a;
AT91C_BASE_PMC -> PMC_PCER =(1UL << AT91C_ID_PIOA);
AT91C_BASE_PIOA -> PIO_PER = (0x1<<24); // PORTA.24 as PIO
AT91C_BASE_PIOA -> PIO_PPUER = (0x1<<24); // PORTA.24 PULLUP ON

AT91C_BASE_PMC -> PMC_PCER = (1UL << AT91C_ID_PIOB);
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;


Go to the top of the page
 
+Quote Post
Lotor
сообщение Jun 27 2012, 09:29
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



Цитата(rtcveel @ Jun 27 2012, 13:24) *
Вот финальная версия инициализации:

Поздравляю, только финальная версия красивее смотрится с тегами [code] wink.gif


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 5th July 2025 - 21:51
Рейтинг@Mail.ru


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