Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/53: Рейтинг темы: голосов - 53, средняя оценка - 4.81
vys kor

Помогите с юартом, заход в прерывание только один раз ((((

08.09.2011, 23:17. Показов 10432. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите с юартом, заход в прерывание только один раз ((((

#include "AT91SAM7S64.h"

#define EXT_OC 18432000 // External Oscillator MAINCK
#define MCK 47923200 // MCK (PLLRC div by 2)
#define MCKKHz (MCK/1000) // MCK in kHz
#define BR 115200 /* Baud Rate */
#define BRD (MCK/16/BR) /* Baud Rate Divisor */

char read;
AT91S_USORT * pUSORT0 = AT91C_BASE_US0; /* Global Pointer to USORT0 */
int sendchar (int ch);

void Usart0_CIrqHomdler(void)
{
read = AT91C_BASE_US0->US_RHR;
sendchar(read);
AT91C_BASE_AIC->AIC_EOICR = 0;

}

int sendchar (int ch)
{ /* Write character to Serial Port */
if (ch == \n) { /* Check for CR */
while (!(pUSORT0->US_CSR & AT91C_US_TXRDY)); /* Woyt for Empty Tx Buffer */
pUSORT0->US_THR = \r; /* Output CR */
}
while (!(pUSORT0->US_CSR & AT91C_US_TXRDY)); /* Woyt for Empty Tx Buffer */
return (pUSORT0->US_THR = ch); /* Transmit Character */
}

int main (void)
{

//enable clock PIO for advanced PIO operation
AT91C_BASE_PMC->PMC_PCER = (1<<AT91C_ID_PIOA)|(1<<AT91C_ID_US0);
//USO setup
//set periphal A
AT91C_BASE_PIOA->PIO_PDR = AT91C_PA5_RXD0 | AT91C_PA6_TXD0 ;
AT91C_BASE_PIOA->PIO_ASR = AT91C_PA5_RXD0 | AT91C_PA6_TXD0;

// Baud Rate Divisor
AT91C_BASE_US0->US_BRGR = BRD;
AT91C_BASE_US0->US_MR = AT91C_US_POR_NONE | AT91C_US_CHRL_8_BITS;
AT91C_BASE_US0->US_IDR = 0;
AT91C_BASE_US0->US_CR = AT91C_US_RXEN | AT91C_US_TXEN;
AT91C_BASE_US0->US_RTOR = 0;
AT91C_BASE_AIC->AIC_IDCR = (1 << AT91C_ID_US0);
//US0 interrupt homdler
AT91C_BASE_AIC->AIC_SVR[AT91C_ID_US0] =(unsykned int) Usart0_CIrqHomdler;
//RXRDY interrupt
AT91C_BASE_US0->US_IER = AT91C_US_RXRDY;
AT91C_BASE_AIC->AIC_SMR[AT91C_ID_US0] = AT91C_AIC_SRCTYPE_HIGH_LEVEL | 3;
AT91C_BASE_AIC->AIC_IECR = (1 << AT91C_ID_US0);
AT91C_BASE_AIC->AIC_ICCR = (1 << AT91C_ID_US0);

while (1)
{

}

}
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.09.2011, 23:17
Ответы с готовыми решениями:

STM32F4. Прерывание завершения записи DMA burst возникает только один раз
Добрый день. Имеется STM32F405. Вывожу данные на пины проца, использую DMA mem to peripheral. Выдача данных производится по событию...

Прерывание срабатывает только 1 раз
Здравствуйте! Стоит задача - при нажатии кнопки, с помощью прерывания нужно повысить значение на ЦАП ESP32. В остальное время в бесконечном...

Внешнее прерывание вызывается только 1 раз
Не могу понять почему прерывание только 1 раз вызывается, хотя вроде все по схеме делал. Тестировал в proteus нажатием кнопки. Буду...

1
0 / 0 / 0
Регистрация: 24.02.2010
Сообщений: 804
20.10.2011, 17:08
Код не смотрел толком, но по теме сразу могу привести пару мест, где покопаться (тем более, что код у вас тут совсем не полностью ;-) )

В стартапе процессора (ассемблеровский код) надо настроить стек для всех режимов (ну или для тех, которые планируете использовать) : IRQ, FIQ, SVC, USER...

Потом там же в стартапе определить функций (тоже ассемблеровские) на каждый тип ексепшинов.
Одной из таких функций будет функция IRQ, куда управление попадает при любом прерывании AIC (это если вы выбрали тип прерываний IRQ). В этой функции вам надо будет пробежаться по регистрам AIC и определить номер прерывания, которое вызвалось и прыгнуть по соответствующему вектору из массива AT91C_BASE_AIC->AIC_SVR[].
Еще один момент - если вдруг попозже надумаете использовать что то типа FriiRTOS, то функции прерываний должны быть откомпилированы в режиме ARM, а обычная программа - в режиме THUMB. Иначе работать будет не долго ;-)
Точного кода сейчас не скажу, так как под рукой его нету. Как до дому доберусь, так смогу подсказать точнее.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.10.2011, 17:08
Помогаю со студенческими работами здесь

Программа не компилируется (не запускается) во второй раз (то есть только один раз)
почему у меня всего лишь один раз могу запустить программу через команду Run, когда хочу еще раз нажать Run не получается через средство...

Как сделать что бы код работал каждый раз а не только один раз
&lt;div class=&quot;slider&quot;&gt; &lt;img src=&quot;g1.jpg&quot; class=&quot;g5&quot;&gt; &lt;img src=&quot;g2.jpg&quot; class=&quot;g55&quot;&gt; &lt;img src=&quot;g3.jpg&quot; class=&quot;g555&quot;&gt; &lt;img...

Почему если несколько раз вызвать функцию она сработает только один раз
#include &lt;iostream&gt; using namespace std; int main() { int func(); { cout &lt;&lt; &quot;AAA&quot;; return 1; ...

Не могу разместить один компонент несколько раз в другом (Корректно работает только один)
Есть компонент кастомного Select, но при попытке поместить 3 таких на страницу с разными параметрами, корректно работает только один: ...

Вывести только те символы, которые встречаются в тексте только один раз
Из заданного текста предложения выберите и выведите на экран только те символы, которые встречаются в нем только один раз (в том порядке, в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru