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

 
 
> Sam7ex256 и UART, Не срабатывает прерывание
Brain_
сообщение Dec 9 2009, 08:05
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 26-11-09
Пользователь №: 53 887



Добрый день, уважаемые эксперты.
Недавно взялся изучать ARM (на плате SAM7EX256). Возникла проблема с прерыванием от UART. Перелопатил примеры и точ то нашел на форуме. Ни в какую не хочет работать.
Для компиляции использую IAR 5.40.
Может еще какие настройки нужны? Нет ли (как в AVR) какой нибудь комады типа SEI?
Вот код:
CODE
#include <board.h>
#include <irq/irq.h>
#include <usart/usart.h>
#include <pmc/pmc.h>
#include "lcd.h"

volatile int uart_count_rx_irq;
//volatile int uart_count_rx_sim;

void InitFreq(void)
{
AT91C_BASE_MC->MC_FMR = AT91C_MC_FWS_1FWS ;
AT91C_BASE_WDTC->WDTC_WDMR= AT91C_WDTC_WDDIS;
AT91C_BASE_PMC->PMC_MOR = (( AT91C_CKGR_OSCOUNT & (0x40 <<8) | AT91C_CKGR_MOSCEN ));
while(!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MOSCS));
AT91C_BASE_PMC->PMC_PLLR = AT91C_CKGR_USBDIV_1 | (16<<8) | (AT91C_CKGR_MUL & (72<<16)) | (AT91C_CKGR_DIV & 14);
while(!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_LOCK));
while(!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY));
AT91C_BASE_PMC->PMC_MCKR = AT91C_PMC_PRES_CLK_2 ;
while(!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY));
AT91C_BASE_PMC->PMC_MCKR |= AT91C_PMC_CSS_PLL_CLK ;
while(!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY));
}

void InitPeriphery(void)
{
//enable the clock of the PIO
AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_PIOA;
//enable the clock of the PIO
AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_PIOB;

// BUTTON SW1, SW2
AT91C_BASE_PIOB->PIO_ODR |= BIT24 | BIT25; //Configure in Input
AT91C_BASE_PIOB->PIO_PER |= BIT24 | BIT25; //Enable PB24

//Joystick
AT91C_BASE_PIOB->PIO_ODR |= BIT7 | BIT8 | BIT9 | BIT14 | BIT15; //Configure in Input
AT91C_BASE_PIOB->PIO_PER |= BIT7 | BIT8 | BIT9 | BIT14 | BIT15; //Enable PB25
}

char U0ReadChar(void)
{
while(!(AT91C_BASE_US0->US_CSR & AT91C_US_RXRDY));
return (AT91C_BASE_US0->US_RHR & 0x1FF);
}

void U0WriteChar(char sym)
{
while(!(AT91C_BASE_US0->US_CSR & AT91C_US_TXRDY));
AT91C_BASE_US0->US_THR = sym & 0x1FF;
}

void U0_ISR(void)
{
unsigned int status;

status = AT91C_BASE_US0->US_CSR;

if ((status & AT91C_US_RXBUFF) == AT91C_US_RXRDY)
{
uart_count_rx_irq++;
U0WriteChar(U0ReadChar());
}
}

void U0Init(void)
{
unsigned int mode = AT91C_US_USMODE_NORMAL
| AT91C_US_CLKS_CLOCK
| AT91C_US_CHRL_8_BITS
| AT91C_US_PAR_NONE
| AT91C_US_NBSTOP_1_BIT
| AT91C_US_CHMODE_NORMAL;

//For UART0
AT91C_BASE_PIOA->PIO_PDR = BIT0 | BIT1 | BIT27 | BIT28;
AT91C_BASE_PIOA->PIO_ASR = BIT0 | BIT1 | BIT27 | BIT28;
AT91C_BASE_PIOA->PIO_BSR = 0;

// Enable the peripheral clock in the PMC
PMC_EnablePeripheral(AT91C_ID_US0);

//Disable Time Guard
AT91C_BASE_US0->US_TTGR = 0;

// Configure the USART in the desired mode @115200 bauds
USART_Configure(AT91C_BASE_US0, mode, 115200, BOARD_MCK);

// Configure the RXBUFF interrupt
IRQ_ConfigureIT(AT91C_ID_US0, 0, U0_ISR);

//Enable USART int
AT91C_BASE_US0->US_IER = AT91C_US_RXRDY;

//Enable AIC int
IRQ_EnableIT(AT91C_ID_US0);

// Enable receiver & transmitter
USART_SetTransmitterEnabled(AT91C_BASE_US0, 1);
USART_SetReceiverEnabled(AT91C_BASE_US0, 1);
}

void main()
{
InitFreq();
InitPeriphery();
U0Init();

InitSPI();
InitLCD();
Backlight(BKLGHT_LCD_ON);

while(1)
{
//Left SW
if(!((AT91C_BASE_PIOB->PIO_PDSR) & BIT24))
{
Backlight(BKLGHT_LCD_ON);
}
//Right SW
if(!((AT91C_BASE_PIOB->PIO_PDSR) & BIT25))
{
Backlight(BKLGHT_LCD_OFF);
}
//Joy Center
if(!((AT91C_BASE_PIOA->PIO_PDSR) & BIT15))
{
char tmp[] = "000";
tmp[2] = uart_count_rx_irq % 10 + '0';
tmp[1] = (uart_count_rx_irq / 10) % 10 + '0';
tmp[0] = (uart_count_rx_irq / 100) % 10 + '0';
LCDPutStr(tmp, 104, 0, LARGE, BLACK, WHITE);

tmp[2] = uart_count_rx_sim % 10 + '0';
tmp[1] = (uart_count_rx_sim / 10) % 10 + '0';
tmp[0] = (uart_count_rx_sim / 100) % 10 + '0';
LCDPutStr(tmp, 88, 0, LARGE, BLACK, WHITE);
}

// if(AT91C_BASE_US0->US_CSR & AT91C_US_RXRDY)
// {
// U0WriteChar(U0ReadChar());
// uart_count_rx_sim++;
// }

}
}


Сообщение отредактировал Brain_ - Dec 9 2009, 08:06
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
DpInRock
сообщение Dec 15 2009, 10:26
Сообщение #2


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



А где исправленный текст программы?
При разрешенных (реально разрешенных) прерываниях неправильный вектор скорее всего убъет программу. Это раз.

Если ваша программа работает (а как вы узнаете об этом, кстати), то значит реально никаких прерываний нет.

Тренируйтесь на таймере и используйте UART как отладчик.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Brain_   Sam7ex256 и UART   Dec 9 2009, 08:05
- - aaarrr   Во-первых, если у вас возникли проблемы с прерыван...   Dec 9 2009, 14:00
|- - defunct   Цитата(aaarrr @ Dec 9 2009, 16:00) __enab...   Dec 10 2009, 14:13
- - DpInRock   Вообще-то в main прерывания разрешать надо. В main...   Dec 10 2009, 14:39
|- - esaulenka   Цитата(DpInRock @ Dec 10 2009, 17:39) ЗЫ ...   Dec 10 2009, 15:30
- - aaarrr   Цитата(defunct @ Dec 10 2009, 17:13) авто...   Dec 10 2009, 15:04
- - DpInRock   ЦитатаНескромный вопрос: а Вы кейл хоть раз видели...   Dec 10 2009, 17:02
|- - aaarrr   Цитата(DpInRock @ Dec 10 2009, 20:02) Раз...   Dec 10 2009, 17:15
- - DpInRock   ЦитатаА почему именно атмеловские? Ибо очень логич...   Dec 10 2009, 17:41
- - sergeeff   Так и где же долгожданный исходник startup'a д...   Dec 10 2009, 20:51
- - Brain_   Прошу прощения, за то что 2 дня не появлялся Что...   Dec 11 2009, 10:35
|- - aaarrr   Цитата(Brain_ @ Dec 11 2009, 13:35) Что т...   Dec 11 2009, 10:43
- - DpInRock   В ИАР, если руками не говорить про стартап, то его...   Dec 11 2009, 11:29
|- - aaarrr   Цитата(DpInRock @ Dec 11 2009, 14:29) Пот...   Dec 11 2009, 11:40
- - DpInRock   Про отвратнейший - да сойдет. Но для начала - оче...   Dec 11 2009, 11:54
- - Brain_   Старт Ап нашел. Добавил прямо тот который был в C:...   Dec 14 2009, 09:03
|- - aaarrr   Цитата(Brain_ @ Dec 14 2009, 12:03) Все т...   Dec 14 2009, 17:30
- - sergeeff   Так может вы его пришлете для обозрения?   Dec 14 2009, 10:45
- - Brain_   C удовольствием CODE /* IAR startup file for...   Dec 14 2009, 11:28
- - sergeeff   Первое, что в глаза бросается - в main() вы шагает...   Dec 14 2009, 13:55
- - DpInRock   А вот религия не позволяет обучиться работе с прер...   Dec 14 2009, 16:36
- - Brain_   Религия тут не при чем На таймере тоже пробовал. ...   Dec 14 2009, 17:02
- - sergeeff   Заходите на http://www.atmel.com/dyn/products/tool...   Dec 14 2009, 17:19
- - Brain_   А обработчике я ляп исправил. Спасибо )) Изначаль...   Dec 14 2009, 17:37
- - aaarrr   Хорошо, передача отдельно работает? Мне, если чес...   Dec 14 2009, 17:52
- - Brain_   Про все ужасы и минусы библиотечных функций я имею...   Dec 14 2009, 18:13
|- - aaarrr   Цитата(Brain_ @ Dec 14 2009, 21:13) PS Кс...   Dec 14 2009, 18:28
- - sergeeff   Вы умеете зажигать/гасить LED? Если умеете, в само...   Dec 14 2009, 18:30
- - Brain_   У меня нету Диодов, зато есть LCD у которого можно...   Dec 14 2009, 18:43
- - sergeeff   Первым делом проверить правильность формирования т...   Dec 14 2009, 19:30
- - Brain_   Во всех без исключения примерах настройки AIC один...   Dec 14 2009, 19:34
- - sergeeff   Дело не в примерах, а в вашей абсолютно конкретной...   Dec 15 2009, 07:05
- - Brain_   Куда их printf выведет? Как адреса получить?   Dec 15 2009, 09:18
- - sergeeff   Согласно вашему startup'у первые (8+5)*4 адрес...   Dec 15 2009, 09:40
- - Brain_   это то что находится по нулевому адресу. 18 0C 06 ...   Dec 15 2009, 13:41
|- - aaarrr   Цитата(Brain_ @ Dec 15 2009, 16:41) это т...   Dec 15 2009, 17:47
- - sergeeff   Ну и сидит тут всякая фигня. Уж точно с адреса 0х2...   Dec 15 2009, 17:36
- - Brain_   Приношу свои извинения, по поводу компостирования ...   Dec 17 2009, 10:47


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

 


RSS Текстовая версия Сейчас: 20th August 2025 - 16:00
Рейтинг@Mail.ru


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