[Atmel] SAML21走起3:CALLBACK回调方式UART

[复制链接]
2461|2
 楼主| ddllxxrr 发表于 2015-7-7 13:53 | 显示全部楼层 |阅读模式
接着昨天的工程来哈,这样我就不用再建工程了。一般懒人都这样。

今天是用CALLBACK方式来进行通讯。打开ASF WIZARD把POLL换成CALLBACK。



然后打开ASF EXPLOEROR点Quick Start Guide

里边都有步聚指导,程序如下:

  1. #include <asf.h>
  2. struct usart_module usart_instance;
  3. #define MAX_RX_BUFFER_LENGTH   15

  4. volatile uint8_t rx_buffer[MAX_RX_BUFFER_LENGTH];




  5. void configure_usart(void);
  6. void usart_read_callback(struct usart_module *const usart_module);
  7. void usart_write_callback(struct usart_module *const usart_module);
  8. void configure_usart_callbacks(void);


  9. void configure_usart(void)
  10. {
  11.         struct usart_config config_usart;
  12.         usart_get_config_defaults(&config_usart);
  13.         config_usart.baudrate    = 9600;
  14.         config_usart.mux_setting = EDBG_CDC_SERCOM_MUX_SETTING;
  15.         config_usart.pinmux_pad0 = EDBG_CDC_SERCOM_PINMUX_PAD0;
  16.         config_usart.pinmux_pad1 = EDBG_CDC_SERCOM_PINMUX_PAD1;
  17.         config_usart.pinmux_pad2 = EDBG_CDC_SERCOM_PINMUX_PAD2;
  18.         config_usart.pinmux_pad3 = EDBG_CDC_SERCOM_PINMUX_PAD3;
  19.         while (usart_init(&usart_instance,
  20.         EDBG_CDC_MODULE, &config_usart) != STATUS_OK) {
  21.         }
  22.         usart_enable(&usart_instance);
  23. }


  24. int main (void)
  25. {
  26.         system_init();
  27.         configure_usart();
  28.         configure_usart_callbacks();
  29.        
  30.          system_interrupt_enable_global();
  31.          uint8_t string[] = "Hello World!\r\n";
  32.          usart_write_buffer_wait(&usart_instance, string, sizeof(string));
  33.          while (true) {
  34.                  usart_read_buffer_job(&usart_instance,
  35.                  (uint8_t *)rx_buffer, MAX_RX_BUFFER_LENGTH);
  36.          }

  37.        
  38. }



  39. void usart_read_callback(struct usart_module *const usart_module)
  40. {
  41.         usart_write_buffer_job(&usart_instance,
  42.         (uint8_t *)rx_buffer, MAX_RX_BUFFER_LENGTH);
  43. }
  44. void usart_write_callback(struct usart_module *const usart_module)
  45. {
  46.         port_pin_toggle_output_level(LED_0_PIN);
  47. }
  48. void configure_usart_callbacks(void)
  49. {
  50.         usart_register_callback(&usart_instance,
  51.         usart_write_callback, USART_CALLBACK_BUFFER_TRANSMITTED);
  52.         usart_register_callback(&usart_instance,
  53.         usart_read_callback, USART_CALLBACK_BUFFER_RECEIVED);
  54.         usart_enable_callback(&usart_instance, USART_CALLBACK_BUFFER_TRANSMITTED);
  55.         usart_enable_callback(&usart_instance, USART_CALLBACK_BUFFER_RECEIVED);
  56. }


最后的结果是,先打出世界你好,然后我输入到满缓冲后,就又显示在串口上。以下是截图:



ASF 确实是很方便,点点画画,我的程序就运行了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
lkl0305 发表于 2015-7-29 12:22 | 显示全部楼层
学习下
 楼主| ddllxxrr 发表于 2015-7-29 12:24 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:http://shop34182318.taobao.com/ http://shop562064536.taobao.com

2404

主题

7008

帖子

68

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