打印

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

[复制链接]
812|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 lishuoff 于 2022-9-6 10:42 编辑
void nvic_init(void)
{
                nvic_priority_group_set(NVIC_PRIGROUP_PRE2_SUB2);
                nvic_irq_enable(USART1_IRQn, 0,0);
}
int main(void)
{

    /* configure systick */
    systick_config();

    nvic_init();
    /* configure EVAL_COM0 */
                gd_eval_com_init(USART1);
     
        /* configure USART DMA */
    usart_dma_config();
   
    /* enable USART0 DMA channel transmission and reception */
    dma_channel_enable(DMA0, DMA_CH5);
   
    /* USART DMA enable for transmission and reception */
    usart_dma_receive_config(USART1, USART_DENR_ENABLE);//USART_CTL2 DENR µÚ6bit
                usart_dma_transmit_config(USART1, USART_DENT_ENABLE);
        
         
   
    while(1){;}
}
void gd_eval_com_init(uint32_t com)
{

   
    /* enable GPIO clock */
    rcu_periph_clock_enable(RCU_GPIOA);

    /* enable USART clock */
    rcu_periph_clock_enable(RCU_USART1);

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

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

    /* USART configure */
    usart_deinit(com);
    usart_baudrate_set(com, 9600U);
    usart_word_length_set(com, USART_WL_8BIT);
    usart_stop_bit_set(com, USART_STB_1BIT);
    usart_parity_config(com, USART_PM_NONE);

    usart_receive_config(com, USART_RECEIVE_ENABLE);
    usart_transmit_config(com, USART_TRANSMIT_ENABLE);
<blockquote>usart_interrupt_enable(com, USART_INT_IDLE);
void usart_dma_config(void)
{
    dma_parameter_struct dma_init_struct;
    /* enable DMA0 */
    rcu_periph_clock_enable(RCU_DMA0);
    /* deinitialize DMA channel3(USART0 tx) */
    dma_deinit(DMA0, DMA_CH5);
    dma_init_struct.direction = DMA_PERIPHERAL_TO_MEMORY;
    dma_init_struct.memory_addr = (uint32_t)rx_buffer;
    dma_init_struct.memory_inc = DMA_MEMORY_INCREASE_ENABLE;
    dma_init_struct.memory_width = DMA_MEMORY_WIDTH_8BIT;
    dma_init_struct.number = ARRAYNUM(tx_buffer);
    dma_init_struct.periph_addr = USART1_DATA_ADDRESS;
    dma_init_struct.periph_inc = DMA_PERIPH_INCREASE_DISABLE;
    dma_init_struct.periph_width = DMA_PERIPHERAL_WIDTH_8BIT;
    dma_init_struct.priority = DMA_PRIORITY_ULTRA_HIGH;
    dma_init(DMA0, DMA_CH5, &dma_init_struct);
    /* configure DMA mode */
    dma_circulation_disable(DMA0, DMA_CH5);
    dma_memory_to_memory_disable(DMA0, DMA_CH5);
}
void USART1_IRQHandler(void)
{

<blockquote><span style="white-space:pre">        </span>if(SET == usart_interrupt_flag_get(USART1, USART_INT_FLAG_IDLE))

仿真调试,可以收到数据


但是不能进入空闲中断,请大家看看什么问题

调试发现,USART1的status寄存器ilde与rbne并没有置位

使用特权

评论回复
沙发
lishuoff|  楼主 | 2022-9-6 17:21 | 只看该作者
串口数据采用VSPD发送的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

27

帖子

0

粉丝