[CC3200] CC3220SF UART读取中断触发失败

[复制链接]
 楼主| exiao2011 发表于 2020-10-21 20:39 | 显示全部楼层 |阅读模式
SDK:simplelink_cc32xx_sdk_4_20_00_07                            开发板:官方CC3220SF
起步例程:uartecho
在我实验完uartecho后,我尝试着自己写一个uart驱动,使用的回调模式,但奇怪的是,无论我发多少次数据,读回调中断始终没有触发,逻辑分析仪上可以看到TX发送的数据,为此我有些问题想请教:
1. 发送数据是否有数据格式?垃圾数据难道不能发送成功吗?如果有标准格式,那会是什么样的呢?
2. 我查看相关文档的时候,我注意到当FIFO被填满的时候中断也会触发,但实际情况是无论我发送多少次数据我都没办法触发读回调
3. 我的初始化配置是否正确?我的目的是想让两块CC3220SF互相通过uart通信。(使用了UARTDMA)
4. 感激不尽,望能一一解答,下面附上我的代码
[size=1em][color=white !important]
[size=1em]?

  1. static const UARTCC32XXDMA_HWAttrsV1 uartCC32XXHWAttrs0 = {
  2.     .baseAddr           = UART0_BASE,
  3.     .intNum             = INT_UART0,
  4.     .intPriority        = (~0),
  5.     .flowControl        = UARTCC32XXDMA_FLOWCTRL_NONE,
  6.     .rxChannelIndex     = UDMA_CH8_UARTA0_RX,
  7.     .txChannelIndex     = UDMA_CH9_UARTA0_TX,
  8.     .rxPin              = UARTCC32XXDMA_PIN_45_UART0_RX,
  9.     .txPin              = UARTCC32XXDMA_PIN_62_UART0_TX,
  10.     .ctsPin             = UARTCC32XXDMA_PIN_UNASSIGNED,
  11.     .rtsPin             = UARTCC32XXDMA_PIN_UNASSIGNED,
  12.     .errorFxn           = NULL
  13.   };

  14. /*
  15. *  ======== uartecho.c ========
  16. */
  17. #include <stdint.h>
  18. #include <stddef.h>

  19. /* Driver Header files */
  20. #include <ti/drivers/GPIO.h>
  21. #include <ti/drivers/UART.h>
  22. #include <ti/posix/ccs/unistd.h>
  23. /* Driver configuration */
  24. #include "ti_drivers_config.h"

  25. #define MAX_NUM_RX_BYTES    30   // Maximum RX bytes to receive in one go
  26. #define MAX_NUM_TX_BYTES    30   // Maximum TX bytes to send in one go
  27. uint32_t wantedRxBytes;            // Number of bytes received so far
  28. uint8_t rxBuf[MAX_NUM_RX_BYTES];   // Receive buffer
  29. uint8_t txBuf[MAX_NUM_TX_BYTES];   // Transmit buffer


  30. UART_Handle uart;
  31. int32_t readCount;
  32. uint8_t sendbuffer[20] = {0x40,0x10,0x40,0x10,0x40,0x10,0x80,0x20,0x80,0x20,0x80,0x20,0x80,0x20,0x80,0x20,0x20,0x20};
  33. uint8_t recvicebuffer[16];
  34. int c;
  35. size_t i ;
  36. void gpioButtonFxn0(uint_least8_t index)
  37. {
  38.     UART_write(uart, &sendbuffer, wantedRxBytes);
  39. }
  40. // Write callback function
  41. static void writeCallback(UART_Handle handle, void *rxBuf, size_t size)
  42. {
  43.     // Do nothing
  44. }
  45. // Read callback function
  46. static void readCallback(UART_Handle handle, void *rxBuf, size_t size)
  47. {
  48.     GPIO_toggle(CONFIG_GPIO_LED_0);
  49.     // Make sure we received all expected bytes
  50.     if (size == wantedRxBytes) {
  51.         // Copy bytes from RX buffer to TX buffer
  52.        for ( i = 0; i < size; i++)
  53.            txBuf[i] = ((uint8_t*)rxBuf)[i];
  54.        // Echo the bytes received back to transmitter
  55.        UART_write(handle, txBuf, size);
  56.        // Start another read, with size the same as it was during first call to
  57.        // UART_read()
  58.        UART_read(handle, rxBuf, wantedRxBytes);
  59.        GPIO_toggle(CONFIG_GPIO_LED_1);
  60.     }
  61.     else {
  62.         // Handle error or call to UART_readCancel()
  63.     }
  64. }




  65. /*
  66. *  ======== mainThread ========
  67. */
  68. void *mainThread(void *arg0)
  69. {
  70.     //char        input;
  71.     const char  echoPrompt[] = "Echoing characters:\r\n";
  72.     UART_Params uartParams;

  73.     /* Call driver init functions */
  74.     GPIO_init();
  75.     UART_init();

  76.     /* Configure the LED pin */
  77.     GPIO_setConfig(CONFIG_GPIO_LED_0, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
  78.     GPIO_setConfig(CONFIG_GPIO_LED_1, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
  79.     GPIO_setConfig(CONFIG_BUTTON_0, GPIO_CFG_IN_PU | GPIO_CFG_IN_INT_FALLING);


  80.     /* Turn on user LED */
  81.     GPIO_write(CONFIG_GPIO_LED_0, CONFIG_GPIO_LED_OFF);
  82.     GPIO_write(CONFIG_GPIO_LED_1, CONFIG_GPIO_LED_OFF);

  83.     /* Install Button callback */
  84.     GPIO_setCallback(CONFIG_BUTTON_0, gpioButtonFxn0);
  85.     /* Enable interrupts */
  86.     GPIO_enableInt(CONFIG_BUTTON_0);
  87.     /* Create a UART with data processing off. */


  88.     UART_Params_init(&uartParams);
  89.     uartParams.writeMode     = UART_MODE_CALLBACK;
  90.     uartParams.writeDataMode = UART_DATA_BINARY;
  91.     uartParams.writeCallback = writeCallback;
  92.     uartParams.readMode      = UART_MODE_CALLBACK;
  93.     uartParams.readDataMode  = UART_DATA_BINARY;
  94.     uartParams.readCallback  = readCallback;
  95.     uartParams.baudRate = 115200;

  96.     uart = UART_open(CONFIG_UART_0, &uartParams);
  97.     if (uart == NULL) {
  98.         /* UART_open() failed */
  99.         while (1);
  100.     }
  101.     UART_write(uart, echoPrompt, sizeof(echoPrompt));
  102.     wantedRxBytes = 16;
  103.     int rxBytes = UART_read(uart, rxBuf, wantedRxBytes);


  104.    // UART_write(uart, echoPrompt, sizeof(echoPrompt));

  105.     /* Loop forever echoing */
  106.     while (1) {
  107.     }
  108. }







dirtwillfly 发表于 2020-10-21 21:16 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

141

帖子

0

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

14

主题

141

帖子

0

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