Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Прошу совета: STM32F103VET6, компилятор IAR v5.50. Не могу получить прерывание по окончании цикла DMA, обслуживающего передачу SPI2 (DMA1_Channel5) (+)

Отправлено nanorobot (90.151.135.170) 11 сентября 2010, г. 09:43


Сама передача происходит, поллинг окончания цикла DMA работает, другие прерывания(в частности Compare/Capture TIM3) функционируют

инициализация NVIC:

/* Enable DMA1 channel5 IRQ Channel */
NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel5_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);


инициализация DMA:


DMA_DeInit(DMA1_Channel5);
DMA_InitStructure5.DMA_PeripheralBaseAddr = (uint32_t)_SPI2_DR;
DMA_InitStructure5.DMA_MemoryBaseAddr = (uint32_t)SPI2_TxBuf;
DMA_InitStructure5.DMA_DIR = DMA_DIR_PeripheralDST;
DMA_InitStructure5.DMA_BufferSize = TX_BUF_SIZE;
DMA_InitStructure5.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitStructure5.DMA_MemoryInc = DMA_MemoryInc_Enable;
DMA_InitStructure5.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
DMA_InitStructure5.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
DMA_InitStructure5.DMA_Mode = DMA_Mode_Normal;
DMA_InitStructure5.DMA_Priority = DMA_Priority_High;
DMA_InitStructure5.DMA_M2M = DMA_M2M_Disable;
DMA_Init(DMA1_Channel5, &DMA_InitStructure5);
DMA_ITConfig(DMA1_Channel5, DMA_IT_TC, ENABLE);
DMA_ClearITPendingBit(DMA1_IT_GL5);


процедура обработки:


#define PORT_ABIT(GPIO_BASE, BIT) *((volatile unsigned long *)(PERIPH_BB_BASE + 0x20*((GPIO_BASE + 0x0C - PERIPH_BASE))+(4*BIT)))
#define SPI_NSS PORT_ABIT(GPIOB_BASE, 12)

void DMAChannel5_IRQHandler(void)
{
/* Test on DMA1 Channel5 Transfer Complete interrupt */
if(DMA_GetITStatus(DMA1_IT_TC5))
{
SPI2_NSS = 1;

/* Clear DMA1 Channel5 Half Transfer, Transfer Complete and Global interrupt pending bits */
DMA_ClearITPendingBit(DMA1_IT_GL5);
}
}






Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
к трём прибавьте 5:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru