Страница 7 из 9

Re: AT91SAM7 старт с коленки

Добавлено: Пн фев 21, 2011 14:54:38
romazan
Привет радиокотам на базе ARM. Нужна помощь, чтобы разобраться с SPI интерфейсом. Решил тут подключить дисплей от нокии PCD8544 к SPI0 и тут же возникли баги. Дисплей молчит как рыба. У меня сто процентная уверенность что я неправильно работую с интерфейсом. Выкладываю код "keil":

Re: AT91SAM7 старт с коленки

Добавлено: Сб мар 19, 2011 22:01:50
romazan
Народ мож кто сталкивался с проблемой, что при отправке данных в SPI, некоторые из них не проходили.
У меня такая проблема, шлю данные в дисплей, он не запускается. Ладно. Начинаю вручную отлаживать - F11, данные начинают выходить и дисплей нормально запускается. Пробовал ставить задержки в секунду!!! Такая-же байда. У кого есть идеи?

Re: AT91SAM7 старт с коленки

Добавлено: Вс мар 20, 2011 05:31:02
ibiza11
neonix писал(а):ELcat я бы такое не оставил бы для будущих поколений...

Код: Выделить всё

....
int main(void)
{
   AT91PS_PIO pPIOA     = AT91C_BASE_PIOA;
   AT91PS_PMC pPMC      = AT91C_BASE_PMC;
   pPMC->PMC_PCER = (1 << AT91C_ID_PIOA ); //Включаем тактирование PIOA
   pPIOA->PIO_OER = AT91C_PIO_PA1 | AT91C_PIO_PA2;
....
Уважаемый, neonix, в первой строчке кода Вы инициализируете порт в/в как структуру? не могли бы прокомментировать? я новичек :oops:

Re: AT91SAM7 старт с коленки

Добавлено: Вс мар 20, 2011 12:19:59
neonix
Вся периферия в стандартной библиотеке представлена структурами, кроме того для каждой переферии есть адреса в карте памяти SAM7S.
AT91PS_PIO - это указатель на структуру AT91S_PIO которой мы присваиваем адрес контроллера питания AT91C_BASE_PIOA.
Можно выполнить ту же самую задачу с помощью инлайн функции из библиотеки.

Код: Выделить всё

AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_PIOA) ;
Но в инлайн функциях есть куча багов и недоработок, поэтому их использование может быть чревато.

Re: AT91SAM7 старт с коленки

Добавлено: Пн апр 11, 2011 01:00:00
inkHunter
ibiza11 писал(а):
neonix писал(а):ELcat я бы такое не оставил бы для будущих поколений...

Код: Выделить всё

....
int main(void)
{
   AT91PS_PIO pPIOA     = AT91C_BASE_PIOA;
   AT91PS_PMC pPMC      = AT91C_BASE_PMC;
   pPMC->PMC_PCER = (1 << AT91C_ID_PIOA ); //Включаем тактирование PIOA
   pPIOA->PIO_OER = AT91C_PIO_PA1 | AT91C_PIO_PA2;
....
Уважаемый, neonix, в первой строчке кода Вы инициализируете порт в/в как структуру? не могли бы прокомментировать? я новичек :oops:
pPIOA это что такое ? только начинаю, разбираться

Re: AT91SAM7 старт с коленки

Добавлено: Пн апр 11, 2011 12:34:30
SII
pPIOA это что такое ? только начинаю, разбираться
Указатель на структуру, содержащую регистры порта ввода-вывода A, судя по всему.

Re: AT91SAM7 старт с коленки

Добавлено: Пн апр 11, 2011 21:47:30
inkHunter
Victor Gordienko писал(а):
ibiza11 писал(а): Уважаемый, neonix, в первой строчке кода Вы инициализируете порт в/в как структуру? не могли бы прокомментировать? я новичек :oops:
pPIOA это что такое ? только начинаю, разбираться
а так можна
AT91PS_PIO pPIOA;
pPIOA->PIO_OER = AT91C_PIO_PA1 | AT91C_PIO_PA2;

Re: AT91SAM7 старт с коленки

Добавлено: Вт апр 12, 2011 02:01:30
SII
Нельзя. Сначала надо присвоить начальное значение pPIOA.

Re: AT91SAM7 старт с коленки

Добавлено: Пт май 06, 2011 12:19:29
inkHunter
Как обявить прерывание по нажатию кнопки у AT91SAM7 ?

Re: AT91SAM7 старт с коленки

Добавлено: Пт май 06, 2011 18:17:25
SII
Кнопка заведена на какую-нибудь из ног микроконтроллера. Значит, нужно настроить эту самую ногу как вход (возможно, с включенной подтяжкой) и с генерацией запроса прерывания при изменении состояния. Как конкретно, нужно смотреть документацию на PIO. Ну а как объявить в программе, это я уже не знаю: на Си не пишу. Но сразу скажу, что там довольно много чего делать придётся, ведь запросы прерываний от периферии сначала поступают на контроллер прерываний (у АТМЕЛовских АРМов он называется AIC), а значит, для начала нужно правильным образом настроить его.

Re: AT91SAM7 старт с коленки

Добавлено: Пт июл 15, 2011 20:30:59
inkHunter
У кого есть пример работы с USB для AT91SAM7 ?

Re: AT91SAM7 старт с коленки

Добавлено: Пт июл 15, 2011 20:44:07
Satyr
Victor Gordienko писал(а):У кого есть пример работы с USB для AT91SAM7 ?
Есть у сайта атмела.

Re: AT91SAM7 старт с коленки

Добавлено: Пт июл 15, 2011 20:50:57
Stepan
Satyr писал(а): Есть у сайта атмела.
вот ссыль

Re: AT91SAM7 старт с коленки

Добавлено: Пт июл 15, 2011 21:43:25
inkHunter
Stepan писал(а):
Satyr писал(а): Есть у сайта атмела.
вот ссыль
Оу, что то там сложновато ((( ..... нет по русски ничего ?

Re: AT91SAM7 старт с коленки

Добавлено: Пт сен 09, 2011 13:34:07
inkHunter
Помогити с прерыванием по приему UART, 1 раз работает нормально, заходит в прерывание, но уже 2 раз нет (
вот код :
#include "AT91SAM7S64.h"
#define SW (pPIO->PIO_PDSR)
#define LED0 (1<<0) // PA0
#define LED1 (1<<1) // PA1
#define LED2 (1<<2) // PA2
#define LED3 (1<<3) // PA3
#define SW0 (1<<19) // PA19
#define SW1 (1<<20) // PA20
#define SW2 (1<<15) // PA15
#define SW3 (1<<14) // PA14
#define LED_MASK (LED0|LED1|LED3)
#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 */

void Usart_c_irq_handler(void);
void init_serial_pc (void);


AT91S_USART * pUSART1 = AT91C_BASE_US1; /* Global Pointer to USART0 */
AT91PS_AIC pAIC = AT91C_BASE_AIC;
AT91PS_PIO pPIO = AT91C_BASE_PIOA;


void init_serial_pc (void)
{ /* Initialize Serial Interface */

pAIC->AIC_IDCR=1<<AT91C_ID_US1;
pAIC->AIC_SVR[AT91C_ID_US1] = (unsigned int) Usart_c_irq_handler ;
pAIC->AIC_SMR[AT91C_ID_US1] = AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL | 1;
pAIC->AIC_ICCR=1<<AT91C_ID_US1;
AT91C_BASE_US1->US_IER = (0x1 << 0);
pAIC->AIC_IECR = 1<<AT91C_ID_US1;
AT91C_BASE_US1->US_TTGR = 0;
*AT91C_PIOA_PDR = AT91C_PA21_RXD1 | /* Enable RxD0 Pin */
AT91C_PA22_TXD1; /* Enalbe TxD0 Pin */

pUSART1->US_CR =AT91C_US_RSTRX | /* Reset Receiver */
AT91C_US_RSTTX | /* Reset Transmitter */
AT91C_US_RXDIS | /* Receiver Disable */
AT91C_US_TXDIS; /* Transmitter Disable */

pUSART1->US_MR =AT91C_US_USMODE_NORMAL | /* Normal Mode */
AT91C_US_CLKS_CLOCK | /* Clock = MCK */
AT91C_US_CHRL_8_BITS | /* 8-bit Data */
AT91C_US_PAR_NONE | /* No Parity */
AT91C_US_NBSTOP_1_BIT; /* 1 Stop Bit */

pUSART1->US_BRGR = BRD; /* Baud Rate Divisor */

pUSART1->US_CR =AT91C_US_RXEN | /* Receiver Enable */
AT91C_US_TXEN; /* Transmitter Enable */
}


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

int getkey_pc (void)
{ /* Read character from Serial Port */
while (!(pUSART1->US_CSR & AT91C_US_RXRDY)); /* Wait for Full Rx Buffer */
return (pUSART1->US_RHR); /* Read Character */
}

void Usart_c_irq_handler(void)
{
unsigned int status;
char data;
status = AT91C_BASE_US1 -> US_CSR ;
status &= AT91C_BASE_US1 -> US_IMR;

if (status & AT91C_US_RXRDY)
{
pPIO->PIO_CODR = LED1;
data=getkey_pc();
sendchar(data);
}
pPIO->PIO_CODR = LED3;
}


int main(void)
{

*AT91C_PMC_PCER = (1<<AT91C_ID_US1)|(1 <<AT91C_ID_PIOA);

init_serial_pc ();

pPIO->PIO_PER = LED_MASK;
pPIO->PIO_OER = LED_MASK;
pPIO->PIO_SODR = LED_MASK;

while (1)
{
}
}

Re: AT91SAM7 старт с коленки

Добавлено: Пт сен 09, 2011 13:54:26
romazan
сбросить прерывание забыл

Re: AT91SAM7 старт с коленки

Добавлено: Пт сен 09, 2011 14:05:54
inkHunter
romazan писал(а):сбросить прерывание забыл
Я так понял нужно добавить AT91C_BASE_AIC->AIC_EOICR = 0;
или нет ?
void Usart_c_irq_handler(void)
{
unsigned int status;
char data;
status = AT91C_BASE_US1 -> US_CSR ;
status &= AT91C_BASE_US1 -> US_IMR;

if (status & AT91C_US_RXRDY)
{
pPIO->PIO_CODR = LED1;
data=getkey_pc();
sendchar(data);
}
pPIO->PIO_CODR = LED3;
AT91C_BASE_AIC->AIC_EOICR = 0;
}

Так само работает только один раз (

Re: AT91SAM7 старт с коленки

Добавлено: Пт сен 09, 2011 20:19:47
inkHunter
Что никто не поможет ?

Re: AT91SAM7 старт с коленки

Добавлено: Вс сен 11, 2011 14:17:09
romazan
AT91C_BASE_AIC->AIC_EOICR = AT91C_BASE_US1 -> US_CSR

Re: AT91SAM7 старт с коленки

Добавлено: Ср сен 14, 2011 09:49:11
Stepan
romazan, разобрались с проблемой со SPI?
а то, похоже, у меня та же байда: SD карточка на SPI не инициализируется, если запускаю дебаг - всё работает (програмный ресет с верификацией после подачи питания тоже помогает). Паузы перед инициализацией SDшки не помогают.