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

 
 
> 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

Сообщений в этой теме
- 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
- - DpInRock   А где исправленный текст программы? При разрешенны...   Dec 15 2009, 10:26
- - 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 Текстовая версия Сейчас: 19th July 2025 - 21:02
Рейтинг@Mail.ru


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