859|3

7

帖子

0

TA的资源

一粒金砂(中级)

 

samd21 串口接收中断代码生成器配置 [复制链接]

        问题:用Microchip Studio 中的代码生成器配置串口,接收中断配置,但是生成的代码里找不到中断入口函数,无法通过中断来接收串口的数据,发送OK。因为现有项目使用的都是代码生成器生成的,故没有使用ASF库里面的串口函数,希望大家可以指点迷津。

         下图为代码生成器串口配置的参数

无标题.png 串口的初始化代码:

int8_t USART_0_init()
{

    if (!hri_sercomusart_is_syncing(SERCOM0, SERCOM_USART_SYNCBUSY_SWRST)) {
        uint32_t mode = SERCOM_USART_CTRLA_MODE(1);
        if (hri_sercomusart_get_CTRLA_reg(SERCOM0, SERCOM_USART_CTRLA_ENABLE)) {
            hri_sercomusart_clear_CTRLA_ENABLE_bit(SERCOM0);
            hri_sercomusart_wait_for_sync(SERCOM0, SERCOM_USART_SYNCBUSY_ENABLE);
        }
        hri_sercomusart_write_CTRLA_reg(SERCOM0, SERCOM_USART_CTRLA_SWRST | mode);
    }
    hri_sercomusart_wait_for_sync(SERCOM0, SERCOM_USART_SYNCBUSY_SWRST);

    hri_sercomusart_write_CTRLA_reg(
        SERCOM0,
        1 << SERCOM_USART_CTRLA_DORD_Pos           /* Data Order: enabled */
            | 0 << SERCOM_USART_CTRLA_CMODE_Pos    /* Communication Mode: disabled */
            | 0 << SERCOM_USART_CTRLA_FORM_Pos     /* Frame Format: 0 */
            | 0 << SERCOM_USART_CTRLA_SAMPA_Pos    /* Sample Adjustment: 0 */
            | 2 << SERCOM_USART_CTRLA_SAMPR_Pos    /* Sample Rate: 2 */
            | 0 << SERCOM_USART_CTRLA_IBON_Pos     /* Immediate Buffer Overflow Notification: disabled */
            | 0 << SERCOM_USART_CTRLA_RUNSTDBY_Pos /* Run In Standby: disabled */
            | 1 << SERCOM_USART_CTRLA_MODE_Pos);   /* Operating Mode: enabled */

    hri_sercomusart_write_CTRLA_TXPO_bf(SERCOM0, SERCOM0_TXPO);
    hri_sercomusart_write_CTRLA_RXPO_bf(SERCOM0, SERCOM0_RXPO);

    hri_sercomusart_write_CTRLB_reg(
        SERCOM0,
        1 << SERCOM_USART_CTRLB_RXEN_Pos         /* Receiver Enable: enabled */
            | 1 << SERCOM_USART_CTRLB_TXEN_Pos   /* Transmitter Enabl: enabled */
            | 0 << SERCOM_USART_CTRLB_PMODE_Pos  /* Parity Mode: disabled */
            | 0 << SERCOM_USART_CTRLB_ENC_Pos    /* Encoding Format: disabled */
            | 0 << SERCOM_USART_CTRLB_SFDE_Pos   /* Start of Frame Detection Enable: disabled */
            | 0 << SERCOM_USART_CTRLB_COLDEN_Pos /* Collision Detection Enable: disabled */
            | 0 << SERCOM_USART_CTRLB_SBMODE_Pos /* Stop Bit Mode: disabled */
            | 0);                                /* Character Size: 0 */

    hri_sercomusart_write_BAUD_reg(SERCOM0, SERCOM0_BAUD_RATE);

    // hri_sercomusart_write_RXPL_reg(SERCOM0,0); /* Receive Pulse Length: 0 */

    // hri_sercomusart_write_DBGCTRL_reg(SERCOM0,0 << SERCOM_USART_DBGCTRL_DBGSTOP_Pos); /* Debug Stop Mode: disabled */

    hri_sercomusart_write_INTEN_reg(
        SERCOM0,
        0 << SERCOM_USART_INTENSET_ERROR_Pos       /* Error Interrupt Enable: disabled */
            | 0 << SERCOM_USART_INTENSET_RXBRK_Pos /* Receive Break Interrupt Enable: disabled */
            | 0 << SERCOM_USART_INTENSET_CTSIC_Pos /* Clear to Send Input Change Interrupt Enable: disabled */
            | 0 << SERCOM_USART_INTENSET_RXS_Pos   /* Receive Start Interrupt Enable: disabled */
            | 1 << SERCOM_USART_INTENSET_RXC_Pos   /* Receive Complete Interrupt Enable: enabled */
            | 0 << SERCOM_USART_INTENSET_TXC_Pos   /* Transmit Complete Interrupt Enable: disabled */
            | 0 << SERCOM_USART_INTENSET_DRE_Pos); /* Data Register Empty Interrupt Enable: disabled */

    hri_sercomusart_write_CTRLA_ENABLE_bit(SERCOM0, 1 << SERCOM_USART_CTRLA_ENABLE_Pos); /* Enable: enabled */

    return 0;
}

 

void USART_0_PORT_init()
{

    gpio_set_pin_function(TX, PINMUX_PA04D_SERCOM0_PAD0);

    gpio_set_pin_function(RX, PINMUX_PA05D_SERCOM0_PAD1);
}

void USART_0_enable()
{
    hri_sercomusart_set_CTRLA_ENABLE_bit(SERCOM0);
}

void system_init(void)
{
    init_mcu();

    // GPIO on PB30

    gpio_set_pin_level(LED,
                       // <y> Initial level
                       // <id> pad_initial_level
                       // <false"> Low
                       // <true"> High
                       true);

    // Set pin direction to output
    gpio_set_pin_direction(LED, GPIO_DIRECTION_OUT);

    gpio_set_pin_function(LED, GPIO_PIN_FUNCTION_OFF);

    USART_0_CLOCK_init();
    USART_0_init();
    USART_0_PORT_init();
    USART_0_enable();
    delay_driver_init();

    //WDT_0_init();
}

附件为工程源码

Usart.rar

5.1 MB, 下载次数: 2

最新回复

microchip的软件环境确实很特别,大家都玩eclipse,他非要玩netbeans   详情 回复 发表于 2023-11-18 10:38
 

回复
举报

4239

帖子

3

TA的资源

版主

 

Microchip Studio生成器就有一点不好,注释太少  

 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

 

没有教程不实用

 
 
 

回复

6754

帖子

18

TA的资源

五彩晶圆(中级)

 

microchip的软件环境确实很特别,大家都玩eclipse,他非要玩netbeans

 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表