MSPM0G3507应用之ADC数据通过SPI接口进行传输

[复制链接]
 楼主| xyz549040622 发表于 2023-12-24 22:46 | 显示全部楼层 |阅读模式
msedge_oa2lixyNJC.png
msedge_pPOXEnZT6l.png
例程位于官方SDK下面,如下图所示:

ZeJQCnpGH3.png
 楼主| xyz549040622 发表于 2023-12-24 22:47 | 显示全部楼层
  1. /*
  2. * Copyright (c) 2023, Texas Instruments Incorporated
  3. * All rights reserved.
  4. *
  5. * Redistribution and use in source and binary forms, with or without
  6. * modification, are permitted provided that the following conditions
  7. * are met:
  8. *
  9. * *  Redistributions of source code must retain the above copyright
  10. *    notice, this list of conditions and the following disclaimer.
  11. *
  12. * *  Redistributions in binary form must reproduce the above copyright
  13. *    notice, this list of conditions and the following disclaimer in the
  14. *    documentation and/or other materials provided with the distribution.
  15. *
  16. * *  Neither the name of Texas Instruments Incorporated nor the names of
  17. *    its contributors may be used to endorse or promote products derived
  18. *    from this software without specific prior written permission.
  19. *
  20. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  21. * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
  22. * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  23. * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
  24. * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  25. * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  26. * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
  27. * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
  28. * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
  29. * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
  30. * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  31. */

  32. #include "ti_msp_dl_config.h"

  33. /* Commands to handle through SPI */
  34. #define SAMPLE_ADC (0x01)
  35. #define SEND_RESULTS (0x02)
  36. #define SAMPLE_SEND_RESULTS (0x03)

  37. /* Data for SPI to receive */
  38. volatile uint8_t gCommand = 0x0;
  39. volatile bool gNextCommand = false;

  40. /* ADC variables */
  41. volatile bool gCheckADC;
  42. uint16_t gADCResult;
  43. uint16_t startADCProcess(void);

  44. int main(void)
  45. {
  46.     SYSCFG_DL_init();

  47.     NVIC_ClearPendingIRQ(SPI_0_INST_INT_IRQN);
  48.     NVIC_EnableIRQ(SPI_0_INST_INT_IRQN);
  49.     NVIC_EnableIRQ(ADC12_0_INST_INT_IRQN);

  50.     /*
  51.      * Process the SPI command received.
  52.      * The commands available are sample adc, send adc result, sample and send adc result.
  53.      */
  54.     while (1) {

  55.         while(gNextCommand == false)
  56.             __WFI();
  57.         gNextCommand = false;

  58.         switch(gCommand){
  59.             case SAMPLE_ADC:
  60.                 gADCResult = startADCProcess();
  61.                 break;
  62.             case SEND_RESULTS:
  63.                 DL_SPI_transmitDataBlocking16(SPI_0_INST, gADCResult);
  64.                 break;
  65.             case SAMPLE_SEND_RESULTS:
  66.                 gADCResult = startADCProcess();
  67.                 DL_SPI_transmitDataBlocking16(SPI_0_INST, gADCResult);
  68.                 break;
  69.             default:
  70.                 break;
  71.         }

  72.     }
  73. }

  74. /* This function is used to enable and start the conversion, then output the result. */
  75. uint16_t startADCProcess(){

  76.     uint16_t adcResult = 0;

  77.     DL_ADC12_enableConversions(ADC12_0_INST);
  78.     delay_cycles(4);
  79.     DL_ADC12_startConversion(ADC12_0_INST);

  80.     while(gCheckADC == false)
  81.     {
  82.         __WFI();
  83.     }

  84.     adcResult = DL_ADC12_getMemResult(ADC12_0_INST, DL_ADC12_MEM_IDX_0);

  85.     return adcResult;
  86. }

  87. void SPI_0_INST_IRQHandler(void)
  88. {
  89.     switch (DL_SPI_getPendingInterrupt(SPI_0_INST)) {
  90.         case DL_SPI_IIDX_RX:
  91.             gCommand = DL_SPI_receiveDataBlocking16(SPI_0_INST);
  92.             /* Toggle the LED after data reception */
  93.             DL_GPIO_togglePins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_1_PIN);
  94.             gNextCommand = true;
  95.             break;
  96.         default:
  97.             break;
  98.     }
  99. }

  100. void ADC12_0_INST_IRQHandler(void) {
  101.   switch (DL_ADC12_getPendingInterrupt(ADC12_0_INST)) {
  102.   case DL_ADC12_IIDX_MEM0_RESULT_LOADED:
  103.     gCheckADC = true;
  104.     break;
  105.   default:
  106.     break;
  107.   }
  108. }


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

本版积分规则

个人签名:qq群: 嵌入式系统arm初学者 224636155←← +→→点击-->小 i 精品课全集,21ic公开课~~←←→→点击-->小 i 精品课全集,给你全方位的技能策划~~←←

2841

主题

19330

帖子

110

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