Как я понял, для того чтобы войти в обработчик
void DMA1_Channel4_IRQHandler(void) нужно сконфигурировать NVIC.
Код
void NVIC_Configuration(void) {
NVIC_InitTypeDef NVIC_InitStructure;
#ifdef VECT_TAB_RAM
/* Set the Vector Table base location at 0x20000000 */
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else /* VECT_TAB_FLASH */
/* Set the Vector Table base location at 0x08000000 */
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
#endif
NVIC_PriorityGroupConfig (NVIC_PriorityGroup_1);
NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel4_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
Из конфигураций UART и DMA убрал функции
USART_DMACmd(USART1, USART_DMAReq_Tx, ENABLE); и
DMA_Cmd(DMA1_Channel4, ENABLE);Запускаю отправку пакета вот так:
Код
int main(void) {
u32 i=0; // debug
RCC_Configuration();
GPIO_Configuration();
DMA_Configuration();
USART_RXTX_Init();
NVIC_Configuration();
while(1) {
for(i=0;i<0xFFFA;i++) {}
USART_DMACmd(USART1, USART_DMAReq_Tx, ENABLE);
DMA_Cmd(DMA1_Channel4, ENABLE);
}
}
Обработчик
Код
void DMA1_Channel4_IRQHandler(void) {
if (DMA_GetITStatus(DMA1_IT_TC4)) {
DMA_ClearITPendingBit(DMA1_IT_GL4); // clear int pending bit
DMA_Cmd(DMA1_Channel4, DISABLE); // disable DMA Channel
}
}
Но после отправки первого пакета программа застопоривается. Вот что в дебаггере.
Код
........
264:; User Initial Stack & Heap
265:
266: IF :DEF:__MICROLIB
267:
268: EXPORT __initial_sp
269: EXPORT __heap_base
270: EXPORT __heap_limit
271:
272: ELSE
273:
274: IMPORT __use_two_region_memory
275: EXPORT __user_initial_stackheap
276: __user_initial_stackheap
277:
0x0800019E E7FE B 0x0800019E
278: LDR R0, = Heap_Mem
0x080001A0 4803 LDR r0,[pc,#12]; @0x080001B0
279: LDR R1, =(Stack_Mem + Stack_Size)
0x080001A2 4904 LDR r1,[pc,#16]; @0x080001B4
280: LDR R2, = (Heap_Mem + Heap_Size)
0x080001A4 4A02 LDR r2,[pc,#8]; @0x080001B0
.......
программа дальше это команды не идет
Код
0x0800019E E7FE B 0x0800019E
Сообщение отредактировал Halfback - Feb 8 2010, 14:49