新手入门
- 积分
- 7
- 金钱
- 7
- 注册时间
- 2021-1-26
- 在线时间
- 1 小时
|
1金钱
u8 buf[32];//用于存储FAT数据
int main(void)
{ u32 sd_size,i;
Stm32_Clock_Init(9);
uart_init(72,9600);
DMA15_init((u32)&USART1->DR,(u32)buf,0x20,0X00001081);
while(1)
{ }
}
//.................
void DMA15_init(u32 cpar,u32 cmar,u16 cndtr,u32 Config)
{
RCC->AHBENR|=1<<0;
DMA1_Channel5->CPAR=(u32)cpar; //DMA1 外设地址
DMA1_Channel5->CMAR=(u32)cmar; //DMA1,存储器地址
DMA1_Channel5->CNDTR = cndtr;
DMA1_Channel5->CCR=Config;
USART1->CR3=1<<6;
switch (cpar)
{ case 0X40013804:
USART1->CR3=1<<6;
USART1->CR1|=1<<4; //总线空闲中断 用于不定长接收
break;
}
MY_NVIC_Init(3,3,DMA1_Channel5_IRQChannel,1);//组2,最低优先级
}
//''''
void USART1_IRQHandler()
{ u8 res;
res++;
res=USART1->SR;
if(res&(1<<5)) //接收到数据
{ res=USART1->DR;
}else
{ //DMA 不定长数据处理
DMA14_init((u32)&USART1->DR,(u32)buf,sizeof(buf)-1,0X00001093);
}
USART1->SR=0;
}
总线空闲中断响应正常。但无法读出空闲标志位。
中断运行到 第一行res++时;IDLE位就自动 清除。其它标志位正常
无法读出。因此无法区别中断类型 。进行相应处理。
K4。12 环境。
|
|