怎么debug就跑进了 dummy_handler中断里面了

[复制链接]
3161|1
 楼主| 电子write_cai 发表于 2016-2-17 14:58 | 显示全部楼层 |阅读模式
我在初始化函数的时候,没有开启任何中断,程序也就是一个简单的串口接收处理,我上传代码,帮忙看看哪里出了问题?
  1. static struct usart_module ext3_uart_module;

  2. /**
  3. *  Configure UART console.
  4. */
  5. static void configure_console(void)
  6. {
  7.         struct usart_config usart_conf;
  8.         usart_get_config_defaults(&usart_conf);
  9.         usart_conf.mux_setting = EXT3_UART_SERCOM_MUX_SETTING ;
  10.         usart_conf.pinmux_pad0 = EXT3_UART_SERCOM_PINMUX_PAD0;
  11.         usart_conf.pinmux_pad1 = EXT3_UART_SERCOM_PINMUX_PAD1;
  12.         usart_conf.pinmux_pad2 = EXT3_UART_SERCOM_PINMUX_PAD2;
  13.         usart_conf.pinmux_pad3 = EXT3_UART_SERCOM_PINMUX_PAD3;
  14.         usart_conf.baudrate    = 57600;
  15.         stdio_serial_init(&ext3_uart_module, EXT3_UART_MODULE, &usart_conf);        usart_enable(&ext3_uart_module);
  16. }


  17. int main(void)
  18. {
  19.         struct port_config pin;
  20.         uint8_t *tmp_data;
  21.         system_init();
  22.         /*Configure UART console.*/
  23.         configure_console();
  24.         /* Output example information */
  25.         puts(STRING_HEADER);
  26.     /*Configures PORT for LED0*/
  27.         port_get_config_defaults(&pin);
  28.         pin.direction = PORT_PIN_DIR_OUTPUT;
  29.         port_pin_set_config(LED0_PIN, &pin);
  30.         port_pin_set_output_level(LED0_PIN, LED0_INACTIVE);
  31.         /*main loop*/
  32.         while(1)
  33.         {
  34.                 usart_serial_getchar(&ext3_uart_module,tmp_data);
  35.         }
  36.        
  37. }


while循环中的代码
  1. static inline void usart_serial_getchar(
  2.                 struct usart_module *const module,
  3.                 volatile uint8_t *c)
  4. {
  5.         volatile uint8_t temp = 0;
  6.         SercomUsart *const usart_hw = &(module->hw->USART);
  7.         while(!(usart_hw->INTFLAG.reg & SERCOM_USART_INTFLAG_RXC));
  8.         temp= (volatile uint8_t)(usart_hw->DATA.bit.DATA);
  9.         *c = temp;
  10. }


现在程序跑起来 经常会进入
  1. /**
  2. * \brief Default interrupt handler for unused IRQs.
  3. */
  4. void Dummy_Handler(void)
  5. {
  6.         while (1) {
  7.         }
  8. }


现在也不知道是什么原因导致的!
泥土中成长 发表于 2016-2-22 14:11 | 显示全部楼层
我也遇到过这个问题,原因是串口的ctrla寄存器里的配置被一条语句清零了。你可以单步调试查看一下SERCOM口寄存器里的模式位是否配置正确。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

157

主题

1534

帖子

3

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