GD32F103RC DMA+空闲中断,simulator仿真,不能触发空闲中断

[复制链接]
964|1
 楼主| lishuoff 发表于 2022-9-5 22:46 | 显示全部楼层 |阅读模式
本帖最后由 lishuoff 于 2022-9-6 10:42 编辑
  1. void nvic_init(void)
  2. {
  3.                 nvic_priority_group_set(NVIC_PRIGROUP_PRE2_SUB2);
  4.                 nvic_irq_enable(USART1_IRQn, 0,0);
  5. }
  1. int main(void)
  2. {

  3.     /* configure systick */
  4.     systick_config();

  5.     nvic_init();
  6.     /* configure EVAL_COM0 */
  7.                 gd_eval_com_init(USART1);
  8.      
  9.         /* configure USART DMA */
  10.     usart_dma_config();
  11.    
  12.     /* enable USART0 DMA channel transmission and reception */
  13.     dma_channel_enable(DMA0, DMA_CH5);
  14.    
  15.     /* USART DMA enable for transmission and reception */
  16.     usart_dma_receive_config(USART1, USART_DENR_ENABLE);//USART_CTL2 DENR µÚ6bit
  17.                 usart_dma_transmit_config(USART1, USART_DENT_ENABLE);
  18.         
  19.          
  20.    
  21.     while(1){;}
  22. }
  1. void gd_eval_com_init(uint32_t com)
  2. {

  3.    
  4.     /* enable GPIO clock */
  5.     rcu_periph_clock_enable(RCU_GPIOA);

  6.     /* enable USART clock */
  7.     rcu_periph_clock_enable(RCU_USART1);

  8.     /* connect port to USARTx_Tx */
  9.     gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_2);

  10.     /* connect port to USARTx_Rx */
  11.     gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_3);

  12.     /* USART configure */
  13.     usart_deinit(com);
  14.     usart_baudrate_set(com, 9600U);
  15.     usart_word_length_set(com, USART_WL_8BIT);
  16.     usart_stop_bit_set(com, USART_STB_1BIT);
  17.     usart_parity_config(com, USART_PM_NONE);

  18.     usart_receive_config(com, USART_RECEIVE_ENABLE);
  19.     usart_transmit_config(com, USART_TRANSMIT_ENABLE);
  20. <blockquote>usart_interrupt_enable(com, USART_INT_IDLE);
  1. void usart_dma_config(void)
  2. {
  3.     dma_parameter_struct dma_init_struct;
  4.     /* enable DMA0 */
  5.     rcu_periph_clock_enable(RCU_DMA0);
  6.     /* deinitialize DMA channel3(USART0 tx) */
  7.     dma_deinit(DMA0, DMA_CH5);
  8.     dma_init_struct.direction = DMA_PERIPHERAL_TO_MEMORY;
  9.     dma_init_struct.memory_addr = (uint32_t)rx_buffer;
  10.     dma_init_struct.memory_inc = DMA_MEMORY_INCREASE_ENABLE;
  11.     dma_init_struct.memory_width = DMA_MEMORY_WIDTH_8BIT;
  12.     dma_init_struct.number = ARRAYNUM(tx_buffer);
  13.     dma_init_struct.periph_addr = USART1_DATA_ADDRESS;
  14.     dma_init_struct.periph_inc = DMA_PERIPH_INCREASE_DISABLE;
  15.     dma_init_struct.periph_width = DMA_PERIPHERAL_WIDTH_8BIT;
  16.     dma_init_struct.priority = DMA_PRIORITY_ULTRA_HIGH;
  17.     dma_init(DMA0, DMA_CH5, &dma_init_struct);
  18.     /* configure DMA mode */
  19.     dma_circulation_disable(DMA0, DMA_CH5);
  20.     dma_memory_to_memory_disable(DMA0, DMA_CH5);
  21. }
  1. void USART1_IRQHandler(void)
  2. {

  3. <blockquote><span style="white-space:pre">        </span>if(SET == usart_interrupt_flag_get(USART1, USART_INT_FLAG_IDLE))
12963160b5d63e98.png
仿真调试,可以收到数据
9807963160b75e155a.png

但是不能进入空闲中断,请大家看看什么问题
474046316b067e838e.png
调试发现,USART1的status寄存器ilde与rbne并没有置位
 楼主| lishuoff 发表于 2022-9-6 17:21 | 显示全部楼层
串口数据采用VSPD发送的
195136317110691b81.png
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

28

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部