|
|
  |
AT91SAM7S новичок |
|
|
|
Dec 20 2011, 06:50
|
Местный
  
Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866

|
Цитата(Xeon @ Dec 20 2011, 10:28)  Спасибо toweroff! А как правильно в keil делать разделения на .c и .h? Делаю как обычно в .h прототипы в .c описываю сами функции, подключаю в main .h и в итоге ошибка: L6218E Undefine simbol "название функции"... Скорее всего Вы просто не прицепили хидер к проекту. PS: Я сейчас кощунственную вещь скажу для этого форума, но есть книга Редькина с переводом документации на Ваш мк. Почитайте.
--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
|
|
|
|
|
Dec 20 2011, 07:06
|
Частый гость
 
Группа: Участник
Сообщений: 140
Регистрация: 21-04-11
Пользователь №: 64 524

|
Цитата(Xeon @ Dec 20 2011, 09:28)  Спасибо toweroff! А как правильно в keil делать разделения на .c и .h? Делаю как обычно в .h прототипы в .c описываю сами функции, подключаю в main .h и в итоге ошибка: L6218E Undefine simbol "название функции"... Ну с этим разобрался, сам затупил немного (где main вписал extern "C" {"подключаемые хедеры"}, а в хедерах перед прототипом extern) Цитата(Lotor @ Dec 20 2011, 09:50)  Скорее всего Вы просто не прицепили хидер к проекту.
PS: Я сейчас кощунственную вещь скажу для этого форума, но есть книга Редькина с переводом документации на Ваш мк. Почитайте. Если это 32-16 битные микроконтроллеры ARM7 фирмы Atmel то полистал...книга-бякя...лучше даташит читать...с инглишом ещё немного дружу)
Сообщение отредактировал Xeon - Dec 20 2011, 07:07
|
|
|
|
|
Dec 20 2011, 07:25
|
Местный
  
Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866

|
Цитата(Xeon @ Dec 20 2011, 11:06)  Если это 32-16 битные микроконтроллеры ARM7 фирмы Atmel то полистал...книга-бякя...лучше даташит читать...с инглишом ещё немного дружу) Тем не менее в этой бяке есть все ответы на ранее заданные Вами вопросы. =)
--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
|
|
|
|
|
Dec 20 2011, 08:45
|
Частый гость
 
Группа: Участник
Сообщений: 140
Регистрация: 21-04-11
Пользователь №: 64 524

|
Цитата(Lotor @ Dec 20 2011, 10:25)  Тем не менее в этой бяке есть все ответы на ранее заданные Вами вопросы. =) Значит надо найти силы её ещё разок почитать  Вроде чего-то добился) только вот незадача прерывание срабатывает только один раз...) Привожу код (В Led.h две функции инициализировать ноги и помыргать светодиодами): Код #include <at91sam7s128.h>
extern "C" { #include "Led.h" }
unsigned char send_val = 0xA0;
void Usart_TX(void) //__irq { unsigned int status; // Read USART status status = AT91C_BASE_US0->US_CSR;
if(status & AT91C_US_TXEMPTY) { AT91C_BASE_US0->US_THR = (unsigned short) send_val; send_val++; } }
int main(void) { // Configure PIO AT91C_BASE_PIOA->PIO_ASR = AT91C_PIO_PA6; AT91C_BASE_PIOA->PIO_PDR = AT91C_PIO_PA6; AT91C_BASE_PIOA->PIO_OER |= AT91C_PIO_PA6;
// Enable usart AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_US0; // Reset and disable receiver & transmitter AT91C_BASE_US0->US_CR = AT91C_US_RSTRX | AT91C_US_RSTTX | AT91C_US_RXDIS | AT91C_US_TXDIS; // Configure mode AT91C_BASE_US0->US_MR = AT91C_US_USMODE_NORMAL | AT91C_US_CHRL_8_BITS | AT91C_US_PAR_NONE; // Configure baudrate // Asynchronous, no oversampling AT91C_BASE_US0->US_BRGR = 104;
// Enable interrupt AT91C_BASE_US0->US_IER = AT91C_US_TXEMPTY; AT91C_BASE_AIC->AIC_IDCR = 1 << AT91C_ID_US0; AT91C_BASE_AIC->AIC_SMR[AT91C_ID_US0] = 0; AT91C_BASE_AIC->AIC_SVR[AT91C_ID_US0] = (unsigned int) &Usart_TX; AT91C_BASE_AIC->AIC_IECR = 1 << AT91C_ID_US0; // Clear interrupt AT91C_BASE_AIC->AIC_ICCR = 1 << AT91C_ID_US0;
// enable rx and tx AT91C_BASE_US0->US_CR = AT91C_US_TXEN | AT91C_US_RXEN;
// Leds Led_Init();
while(1) { Blink(); } }
Сообщение отредактировал Xeon - Dec 20 2011, 08:47
|
|
|
|
|
Dec 20 2011, 09:11
|
Частый гость
 
Группа: Участник
Сообщений: 140
Регистрация: 21-04-11
Пользователь №: 64 524

|
Закоментил потому что в примерах нету __irq а вроде прерывание используется... Сейчас ток запустил... к тому коду добавил следующее: в конец обработчика прерывания строку AT91C_BASE_AIC->AIC_EOICR = 0; и раскоментил __irq в сумме получил следующий код: Код #include <at91sam7s128.h>
extern "C" { #include "Led.h" }
unsigned char send_val = 0xA0;
void Usart_TX(void) __irq //!!!!!!!!!!!!!!!!!!! тут раскоментил !!!!!!!!!!!!!!!!!!!!!!!!!!! { unsigned int status; // Read USART status status = AT91C_BASE_US0->US_CSR;
if(status & AT91C_US_TXEMPTY) { AT91C_BASE_US0->US_THR = (unsigned short) send_val; send_val++; } AT91C_BASE_AIC->AIC_EOICR = 0; // !!!!!!!!! тут добавил !!!!!!!!!!!!!!!!!!!!!!!!!! }
int main(void) { // Configure PIO AT91C_BASE_PIOA->PIO_ASR = AT91C_PIO_PA6; AT91C_BASE_PIOA->PIO_PDR = AT91C_PIO_PA6; AT91C_BASE_PIOA->PIO_OER |= AT91C_PIO_PA6;
// Enable usart AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_US0; // Reset and disable receiver & transmitter AT91C_BASE_US0->US_CR = AT91C_US_RSTRX | AT91C_US_RSTTX | AT91C_US_RXDIS | AT91C_US_TXDIS; // Configure mode AT91C_BASE_US0->US_MR = AT91C_US_USMODE_NORMAL | AT91C_US_CHRL_8_BITS | AT91C_US_PAR_NONE; // Configure baudrate // Asynchronous, no oversampling AT91C_BASE_US0->US_BRGR = 104;
// Enable interrupt AT91C_BASE_US0->US_IER = AT91C_US_TXEMPTY; AT91C_BASE_AIC->AIC_IDCR = 1 << AT91C_ID_US0; AT91C_BASE_AIC->AIC_SMR[AT91C_ID_US0] = 0; AT91C_BASE_AIC->AIC_SVR[AT91C_ID_US0] = (unsigned int) &Usart_TX; AT91C_BASE_AIC->AIC_IECR = 1 << AT91C_ID_US0; // Clear interrupt AT91C_BASE_AIC->AIC_ICCR = 1 << AT91C_ID_US0;
// enable rx and tx AT91C_BASE_US0->US_CR = AT91C_US_TXEN | AT91C_US_RXEN;
// Leds Led_Init();
while(1) { Blink(); } } И УРА заработало!)))) Я скинул пример который смотрел и свой проект, может кто посмотрит как они там делают...пользовался поиском по всему проекту в попытке найти __irq ничего подобного там нет (в примере). Мой код:
1.rar ( 131.89 килобайт )
Кол-во скачиваний: 75Пример:
basic_usart_hw_handshaking_project_at91sam7s_ek_keil.zip ( 266.9 килобайт )
Кол-во скачиваний: 79В примере открывал проект: basic-usart-hw-handshaking-project-at91sam7s-ek\at91sam7s-ek\basic-usart-hw-handshaking-project\uv2\at91sam7s128.uvproj
|
|
|
|
|
Dec 20 2011, 09:29
|
Частый гость
 
Группа: Участник
Сообщений: 140
Регистрация: 21-04-11
Пользователь №: 64 524

|
Цитата(kovigor @ Dec 20 2011, 12:21)  Ложь ! Читаю даташиты почти без словаря, но Редькина прочитываю первым. Хотя бы потому, что это чтение позволяет быстро и качественно получить общую информацию. Ну а детали можно уже и в даташите уточнить ... А без деталек чет ничего работать не хочет
|
|
|
|
|
Dec 21 2011, 08:11
|
Местный
  
Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866

|
Цитата(Xeon @ Dec 21 2011, 12:00)  Опа...) нет...) а как это сделать?) Если у Вас Кеил, то к проекту должен быть подключен стартаповый файл (расширение .s), если перейдете на него, то внизу будет вкладка Config Wizard.
--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
|
|
|
|
|
Dec 21 2011, 08:15
|
Частый гость
 
Группа: Участник
Сообщений: 140
Регистрация: 21-04-11
Пользователь №: 64 524

|
Цитата(Lotor @ Dec 21 2011, 11:11)  Если у Вас Кеил, то к проекту должен быть подключен стартаповый файл (расширение .s), если перейдете на него, то внизу будет вкладка Config Wizard. А какой обьём лучше выставлять, есть тут ли какие либо правила... или главное чтоб ОЗУ хватило?
|
|
|
|
|
Dec 21 2011, 08:46
|
Частый гость
 
Группа: Участник
Сообщений: 140
Регистрация: 21-04-11
Пользователь №: 64 524

|
Цитата(toweroff @ Dec 21 2011, 11:18)  а это уж как будете кучу пользовать  со стеками несколько проще, кейл может рассчитать глубину (максимальную) вызовов... однако, если используются указатели на функции или еще как-то, может не совсем корректно вычисляться. Самому нужно прикидывать размеры Прикинул...выделил... Всё понял!) toweroff и Lotor БОЛЬШОЕ СПАСИБО!!!!!!  И снова вопрос) Как я понял в ARM если ты под юзером то прерывание глобально отрубить не как... а если очень нужно то как это сделать? Или можно чтоб программа всё время выполнялась под каким нить другим режимом, который имеет подобные права, например supervisor?
Сообщение отредактировал Xeon - Dec 21 2011, 08:23
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|