10960|18

530

帖子

4

TA的资源

一粒金砂(高级)

楼主
 

分享一个msp430FR5969多通道AD采样和串口调试的程序以及12864串口显示程序 [复制链接]

 
程序说明:依据MSP430FR5969launchpad 开箱程序改编而成。编程环境:IAR6.01
程序有三个部分:1.多通道采集, 主要在FRAMLogMode.C中,中断在主函数中;
                2.串口调试,老生常谈,在主函数中;
                3.12864串行显示程序;
支持IAR、CCS。
  1. /*******************************************************************************
  2. *
  3. * FRAMLogMode.c  
  4. *
  5. * MSP430FR5969 wakes up every 5 seconds from LPM3.5 to measure and store its
  6. * internal temperature sensor & battery monitor data to FRAM
  7. *
  8. * June 2014
  9. * E. Chen
  10. *
  11. *revised by James Zhu  October.2015  Nankai Universitiy  改编为多通道AD采集程序
  12. ******************************************************************************/


  13. #include "main.h"
  14. #include "driverlib.h"
  15. #include "LCD12864P.h"//12864的串行写入相关驱动函数


  16. unsigned long int get0=0,get1=0,get2=0,get3=0,a0=0;
  17. double  a3=0,a1=0,a2=0;
  18. unsigned long b0[10]={0},b1[10]={0},b2[10]={0},b3[10]={0};
  19. unsigned  int s1=0,s2=0,s3=0,s4=0;

  20. unsigned  int framLog(unsigned int x)
  21. {
  22.     //Initialize the ADC12B Module
  23.     /*
  24.      * Base address of ADC12B Module
  25.      * Use internal ADC12B bit as sample/hold signal to start conversion
  26.      * USE MODOSC 5MHZ Digital Oscillator as clock source
  27.      * Use default clock divider/pre-divider of 1
  28.      * Use Temperature Sensor and Battery Monitor internal channels
  29.      */
  30.     ADC12_B_initParam initParam = {0};
  31.     initParam.sampleHoldSignalSourceSelect = ADC12_B_SAMPLEHOLDSOURCE_SC;
  32.     initParam.clockSourceSelect = ADC12_B_CLOCKSOURCE_ACLK;
  33.     initParam.clockSourceDivider = ADC12_B_CLOCKDIVIDER_1;
  34.     initParam.clockSourcePredivider = ADC12_B_CLOCKPREDIVIDER__1;
  35.     initParam.internalChannelMap = ADC12_B_NOINTCH;
  36.     //initParam.internalChannelMap = ADC12_B_TEMPSENSEMAP | ADC12_B_BATTMAP;
  37.     ADC12_B_init(ADC12_B_BASE, &initParam);

  38.     //Enable the ADC12B module
  39.     ADC12_B_enable(ADC12_B_BASE);

  40.     // Sets up the sampling timer pulse mode
  41.     ADC12_B_setupSamplingTimer(ADC12_B_BASE,
  42.                                ADC12_B_CYCLEHOLD_128_CYCLES,
  43.                                ADC12_B_CYCLEHOLD_128_CYCLES,
  44.                                ADC12_B_MULTIPLESAMPLESENABLE);

  45.      // Maps Temperature Sensor input channel to Memory 0 and select voltage references
  46.     /*
  47.      * Base address of the ADC12B Module
  48.      * Configure memory buffer 0
  49.      * Map input A2 to memory buffer 0
  50.      * Vref+ = IntBuffer
  51.      * Vref- = AVss
  52.      * Memory buffer 0 is not the end of a sequence
  53.      */
  54.     ADC12_B_configureMemoryParam configureMemoryParam = {0};//初始化,下边配置
  55.     configureMemoryParam.memoryBufferControlIndex = ADC12_B_MEMORY_0;
  56.     configureMemoryParam.inputSourceSelect = ADC12_B_INPUT_A2;//原程序:ADC12_B_INPUT_TCMAP
  57.     configureMemoryParam.refVoltageSourceSelect =
  58.         ADC12_B_VREFPOS_INTBUF_VREFNEG_VSS; //vref+= IntBuffer,Vref- = AVss
  59.     configureMemoryParam.endOfSequence = ADC12_B_NOTENDOFSEQUENCE;//非转换结束通道
  60.     configureMemoryParam.windowComparatorSelect =
  61.         ADC12_B_WINDOW_COMPARATOR_DISABLE;
  62.     configureMemoryParam.differentialModeSelect =
  63.         ADC12_B_DIFFERENTIAL_MODE_DISABLE;//配置完全
  64.     ADC12_B_configureMemory(ADC12_B_BASE, &configureMemoryParam);//configureMemoryParam                            ADC12_B_MULTIPLESAMPLESENABLE);
  65.   // Maps Temperature Sensor input channel to Memory 0 and select voltage references
  66.     /*
  67.      * Base address of the ADC12B Module
  68.      * Configure memory buffer 0
  69.      * Map input A7 to memory buffer 0
  70.      * Vref+ = IntBuffer
  71.      * Vref- = AVss
  72.      * Memory buffer 0 is not the end of a sequence
  73.      */
  74.     //ADC12_B_configureMemoryParam configureMemoryParam = {0};//初始化,下边配置
  75.     configureMemoryParam.memoryBufferControlIndex = ADC12_B_MEMORY_1;
  76.     configureMemoryParam.inputSourceSelect = ADC12_B_INPUT_A7;//原程序:ADC12_B_INPUT_TCMAP
  77.     configureMemoryParam.refVoltageSourceSelect =
  78.         ADC12_B_VREFPOS_INTBUF_VREFNEG_VSS; //vref+= IntBuffer,Vref- = AVss
  79.     configureMemoryParam.endOfSequence = ADC12_B_NOTENDOFSEQUENCE;//非转换结束通道
  80.     configureMemoryParam.windowComparatorSelect =
  81.         ADC12_B_WINDOW_COMPARATOR_DISABLE;
  82.     configureMemoryParam.differentialModeSelect =
  83.         ADC12_B_DIFFERENTIAL_MODE_DISABLE;//配置完全
  84.     ADC12_B_configureMemory(ADC12_B_BASE, &configureMemoryParam);//configureMemoryParam
  85.     // Maps Temperature Sensor input channel to Memory 0 and select voltage references
  86.     /*
  87.      * Base address of the ADC12B Module
  88.      * Configure memory buffer 0
  89.      * Map input A7 to memory buffer 0
  90.      * Vref+ = IntBuffer
  91.      * Vref- = AVss
  92.      * Memory buffer 0 is not the end of a sequence
  93.      */
  94.     //ADC12_B_configureMemoryParam configureMemoryParam = {0};//初始化,下边配置
  95.     configureMemoryParam.memoryBufferControlIndex = ADC12_B_MEMORY_2;
  96.     configureMemoryParam.inputSourceSelect = ADC12_B_INPUT_A3;//原程序:ADC12_B_INPUT_TCMAP
  97.     configureMemoryParam.refVoltageSourceSelect =
  98.         ADC12_B_VREFPOS_INTBUF_VREFNEG_VSS; //vref+= IntBuffer,Vref- = AVss
  99.     configureMemoryParam.endOfSequence = ADC12_B_NOTENDOFSEQUENCE;//非转换结束通道
  100.     configureMemoryParam.windowComparatorSelect =
  101.         ADC12_B_WINDOW_COMPARATOR_DISABLE;
  102.     configureMemoryParam.differentialModeSelect =
  103.         ADC12_B_DIFFERENTIAL_MODE_DISABLE;//配置完全
  104.     ADC12_B_configureMemory(ADC12_B_BASE, &configureMemoryParam);//configureMemoryParam

  105.     // Maps Battery Monitor input channel to Memory 0 and select voltage references
  106.     /*
  107.      * Base address of the ADC12B Module
  108.      * Configure memory buffer 1
  109.      * Map input A10 to memory buffer 1
  110.      * Vref+ = IntBuffer
  111.      * Vref- = AVss
  112.      * Memory buffer 1 is the end of a sequence
  113.      */
  114.     configureMemoryParam.memoryBufferControlIndex = ADC12_B_MEMORY_3;
  115.     configureMemoryParam.inputSourceSelect = ADC12_B_INPUT_A12;//原程序为:ADC12_B_INPUT_BATMAP
  116.     configureMemoryParam.refVoltageSourceSelect =
  117.         ADC12_B_VREFPOS_INTBUF_VREFNEG_VSS;
  118.     configureMemoryParam.endOfSequence = ADC12_B_ENDOFSEQUENCE;//标志转换结束
  119.     configureMemoryParam.windowComparatorSelect =
  120.         ADC12_B_WINDOW_COMPARATOR_DISABLE;
  121.     configureMemoryParam.differentialModeSelect =
  122.         ADC12_B_DIFFERENTIAL_MODE_DISABLE;
  123.     ADC12_B_configureMemory(ADC12_B_BASE, &configureMemoryParam);

  124.     // Clear memory buffer 0 interrupt
  125.     ADC12_B_clearInterrupt(ADC12_B_BASE,
  126.                            0,
  127.                            ADC12_B_IFG3   //ADC12 Memory 1 Interrupt Flag
  128.                            );

  129.     // Enable memory buffer 0 interrupt
  130.     ADC12_B_enableInterrupt(ADC12_B_BASE,
  131.                             ADC12_B_IE3,//ADC12 Memory 1 Interrupt Enable
  132.                             0,
  133.                             0);

  134.     // Configure internal reference
  135.     while(Ref_A_isRefGenBusy(REF_A_BASE));              // If ref generator busy, WAIT
  136.     Ref_A_enableTempSensor(REF_A_BASE);
  137.     Ref_A_setReferenceVoltage(REF_A_BASE, REF_A_VREF2_5V);
  138.     Ref_A_enableReferenceVoltage(REF_A_BASE);

  139.     // Start timer
  140.     Timer_A_initUpModeParam param = {0};
  141.     param.clockSource = TIMER_A_CLOCKSOURCE_ACLK;
  142.     param.clockSourceDivider = TIMER_A_CLOCKSOURCE_DIVIDER_1;
  143.     param.timerPeriod = 13;
  144.     param.timerInterruptEnable_TAIE = TIMER_A_TAIE_INTERRUPT_DISABLE;
  145.     param.captureCompareInterruptEnable_CCR0_CCIE =
  146.                     TIMER_A_CCIE_CCR0_INTERRUPT_ENABLE;
  147.     param.timerClear = TIMER_A_DO_CLEAR;
  148.     param.startTimer = true;
  149.     Timer_A_initUpMode(TIMER_A0_BASE, ¶m);

  150.     __bis_SR_register(LPM3_bits | GIE);       // Enter LPM3. Delay for Ref to settle.

  151.     Timer_A_stop(TIMER_A0_BASE);
  152.     //Enable/Start sampling and conversion
  153.     /*
  154.      * Base address of ADC12B Module
  155.      * Start the conversion into memory buffer 0
  156.      * Use the single-channel, single-conversion mode
  157.      */
  158.     ADC12_B_startConversion(ADC12_B_BASE,
  159.                             ADC12_B_MEMORY_0,
  160.                             ADC12_B_SEQOFCHANNELS);

  161.     __bis_SR_register(LPM3_bits | GIE);   // Wait for conversion to complete
  162.     __bic_SR_register(GIE);

  163.     ADC12_B_disable(ADC12_B_BASE);
  164.    //此处可以get转换结果并显示
  165.      get0=ADC12_B_getResults(ADC12_B_BASE, ADC12_B_MEMORY_0);
  166.      get1=ADC12_B_getResults(ADC12_B_BASE, ADC12_B_MEMORY_1);
  167.      get2=ADC12_B_getResults(ADC12_B_BASE, ADC12_B_MEMORY_2);
  168.      get3=ADC12_B_getResults(ADC12_B_BASE, ADC12_B_MEMORY_3);
  169.                      if(x==0)
  170.                     {
  171.                       if(s1==0) //初次进入 清屏
  172.                       {
  173.                        Ini_Lcd(); s1=s1+1;s2=0;s3=0;s4=0;
  174.                       }
  175.                       lcd_pos(0,0);
  176.                       Disp_HZ("拓扑输出",4); Send(1,':');      
  177.                       a3=10*2.5*get3/4095;//3000k,30k
  178.                       get3=a3*100;
  179.                       Disp_SZ(get3/1000);
  180.                       Disp_SZ(get3/100%10);
  181.                       Send(1,'.');
  182.                       Disp_SZ(get3/10%10);
  183.                      // Disp_SZ(get3%10);
  184.                       Send(1,'V');
  185.                      
  186.                        lcd_pos(2,2);
  187.                       Send(1,'C'); Send(1,'H'); Send(1,'1'); Send(1,':'); //CH1  
  188.                       get0=2*25*100*get0/4095;//200k,200k
  189.                       get0=get0+90;
  190.                       a0=get0/1000;  
  191.                       if(a0)Disp_SZ(a0);
  192.                       Send(1,'.');
  193.                       Disp_SZ(get0/100%10);
  194.                     //  Disp_SZ(get0/10%10);                  
  195.                    //  Disp_SZ(get0%10);
  196.                       Send(1,'V');
  197.                      
  198.                         lcd_pos(3,2);                  
  199.                       Send(1,'C'); Send(1,'H'); Send(1,'2'); Send(1,':'); //CH2
  200.                       get1=3*25*100*get1/4095;//200k,100k      
  201.                       get1=get1+150;
  202.                       Disp_SZ(get1/1000);
  203.                       Send(1,'.');
  204.                       Disp_SZ(get1/100%10);
  205.                       //Disp_SZ(get1/10%10);
  206.                      // Disp_SZ(get1%10);
  207.                       Send(1,'V');
  208.                      
  209.                         lcd_pos(4,2);
  210.                       Send(1,'C'); Send(1,'H'); Send(1,'3'); Send(1,':'); //CH3
  211.                       a2=101*2.5*get2/4095; //3000k,30k
  212.                       get2=a2*10;//一个长公式 越界
  213.                       Disp_SZ(get2/1000);
  214.                       Disp_SZ(get2/100%10);
  215.                       Disp_SZ(get2/10%10);
  216.                      // Send(1,'.');
  217.                      // Disp_SZ(get2%10);
  218.                       Send(1,'V');

  219.                    }
  220.      
  221.                   if(x==1)
  222.                  {
  223.                        if(s2==0) //初次进入 清屏
  224.                       {
  225.                        Ini_Lcd(); s2=s2+1;s1=0;s3=0;s4=0;
  226.                       }
  227.                       lcd_pos(2,2);
  228.                       Send(1,'C'); Send(1,'H'); Send(1,'1'); Send(1,':'); //CH1  
  229.                       get0=2*25*100*get0/4095;//200k,200k
  230.                       get0=get0+150;
  231.                       a0=get0/1000;  
  232.                       if(a0)Disp_SZ(a0);
  233.                       Send(1,'.');
  234.                       Disp_SZ(get0/100%10);
  235.                     //  Disp_SZ(get0/10%10);                  
  236.                    //  Disp_SZ(get0%10);
  237.                       Send(1,'V');
  238.                      
  239.                        lcd_pos(3,2);                  
  240.                       Send(1,'C'); Send(1,'H'); Send(1,'2'); Send(1,':'); //CH2
  241.                       get1=3*25*100*get1/4095;//200k,100k      
  242.                       get1=get1+150;
  243.                       Disp_SZ(get1/1000);
  244.                       Send(1,'.');
  245.                       Disp_SZ(get1/100%10);
  246.                       //Disp_SZ(get1/10%10);
  247.                      // Disp_SZ(get1%10);
  248.                       Send(1,'V');
  249.                      
  250.                        lcd_pos(4,2);
  251.                       Send(1,'C'); Send(1,'H'); Send(1,'3'); Send(1,':'); //CH3
  252.                       a2=101*2.5*get2/4095; //3000k,30k
  253.                       get2=a2*10;//一个长公式 越界
  254.                       Disp_SZ(get2/1000);
  255.                       Disp_SZ(get2/100%10);
  256.                       Disp_SZ(get2/10%10);
  257.                      // Send(1,'.');
  258.                      // Disp_SZ(get2%10);
  259.                       Send(1,'V');
  260.                  }
  261.                   if(x==2)
  262.                    {
  263.                      if(s3==0) //初次进入 清屏
  264.                       {
  265.                        Ini_Lcd(); s3=s3+1;s1=0;s2=0;s4=0;
  266.                       }
  267.                       lcd_pos(3,2);                  
  268.                       Send(1,'C'); Send(1,'H'); Send(1,'2'); Send(1,':'); //CH2
  269.                       get1=3*25*100*get1/4095;//200k,100k      
  270.                       get1=get1+150;
  271.                       Disp_SZ(get1/1000);
  272.                       Send(1,'.');
  273.                       Disp_SZ(get1/100%10);
  274.                       //Disp_SZ(get1/10%10);
  275.                      // Disp_SZ(get1%10);
  276.                       Send(1,'V');
  277.                      
  278.                       lcd_pos(4,2);
  279.                       Send(1,'C'); Send(1,'H'); Send(1,'3'); Send(1,':'); //CH3
  280.                       a2=101*2.5*get2/4095; //3000k,30k
  281.                       get2=a2*10;//一个长公式 越界
  282.                       Disp_SZ(get2/1000);
  283.                       Disp_SZ(get2/100%10);
  284.                       Disp_SZ(get2/10%10);
  285.                      // Send(1,'.');
  286.                      // Disp_SZ(get2%10);
  287.                       Send(1,'V');
  288.                     }
  289.                    if(x==3)
  290.                    {
  291.                      if(s4==0) //初次进入 清屏
  292.                       {
  293.                        Ini_Lcd(); s4=s4+1;s1=0;s2=0;s3=0;
  294.                       }
  295.                       lcd_pos(4,2);
  296.                       Send(1,'C'); Send(1,'H'); Send(1,'3'); Send(1,':'); //CH3
  297.                       a2=101*2.5*get2/4095; //3000k,30k
  298.                       get2=a2*10;//一个长公式 越界
  299.                       Disp_SZ(get2/1000);
  300.                       Disp_SZ(get2/100%10);
  301.                       Disp_SZ(get2/10%10);
  302.                      // Send(1,'.');
  303.                      // Disp_SZ(get2%10);
  304.                       Send(1,'V');
  305.                    }
  306.                    return 1;
  307.                  
  308.                                             
  309. }
复制代码
下面是主程序中的部分:
  1. /*******************************************************************************
  2. *
  3. * main.c
  4. *
  5. * Out of Box Demo for the MSP-EXP430FR5969
  6. * Main loop, initialization, and interrupt service routines
  7. *
  8. * June 2014
  9. * E. Chen
  10. *
  11. *Revised by James Zhu  October.2015  Nankai Universitiy
  12. ******************************************************************************/
  13. #include "main.h"
  14. #include "FRAMLogMode.h"
  15. #include "driverlib.h"
  16. #include "LCD12864P.h"//12864的串行写入相关驱动函数
  17. uint8_t RXData1 = 0, TXData1 = 0,RXData2 = 0, TXData2 = 0;
  18. uint8_t check1 = 0,check2 = 0,command=0;
  19. uint8_t t1=0,t2=0;//初次执行函数 清屏

  20. void Init_Clock()
  21. {
  22.   // LFXT Setup
  23.         //Set PJ.4 and PJ.5 as Primary Module Function Input.
  24.         /*

  25.          * Select Port J
  26.          * Set Pin 4, 5 to input Primary Module Function, LFXT.
  27.          */
  28.         GPIO_setAsPeripheralModuleFunctionInputPin(
  29.                 GPIO_PORT_PJ,
  30.                 GPIO_PIN4 + GPIO_PIN5,
  31.                 GPIO_PRIMARY_MODULE_FUNCTION
  32.                 );
  33.     // Set DCO frequency to 1 MHz
  34.     CS_setDCOFreq(CS_DCORSEL_0, CS_DCOFSEL_0);
  35.     //Set external clock frequency to 32.768 KHz
  36.     CS_setExternalClockSource(32768, 0);
  37.     //Set ACLK=LFXT
  38.     CS_initClockSignal(CS_ACLK, CS_LFXTCLK_SELECT, CS_CLOCK_DIVIDER_1);
  39.     // Set SMCLK = DCO with frequency divider of 1
  40.     CS_initClockSignal(CS_SMCLK, CS_DCOCLK_SELECT, CS_CLOCK_DIVIDER_1);
  41.     // Set MCLK = DCO with frequency divider of 1
  42.     CS_initClockSignal(CS_MCLK, CS_DCOCLK_SELECT, CS_CLOCK_DIVIDER_1);
  43.     //Start XT1 with no time out
  44.     CS_turnOnLFXT(CS_LFXT_DRIVE_0);
  45. }
  46. /*
  47. * UART Communication Initialization
  48. */
  49. void Init_UART1()
  50. {  
  51.    // Configure UART pins  Set P2.0 and P2.1 as Secondary Module Function Input.     
  52.    GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P2,GPIO_PIN0 + GPIO_PIN1,GPIO_SECONDARY_MODULE_FUNCTION);
  53.    //配置传输指示灯
  54.    GPIO_setAsOutputPin( GPIO_PORT_P1, GPIO_PIN0);       //配置P1.0为输出
  55.    GPIO_setOutputLowOnPin( GPIO_PORT_P1, GPIO_PIN0 );   //配置P1.0输出低
  56.     // Configure UART
  57.     EUSCI_A_UART_initParam param = {0};
  58.     param.selectClockSource = EUSCI_A_UART_CLOCKSOURCE_SMCLK;
  59.     param.clockPrescalar = 6;
  60.     param.firstModReg = 8;
  61.     param.secondModReg = 0x20;
  62.     param.parity = EUSCI_A_UART_NO_PARITY;
  63.     param.msborLsbFirst = EUSCI_A_UART_LSB_FIRST;
  64.     param.numberofStopBits = EUSCI_A_UART_ONE_STOP_BIT;
  65.     param.uartMode = EUSCI_A_UART_MODE;
  66.     param.overSampling = EUSCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION;
  67.   
  68.     if(STATUS_FAIL == EUSCI_A_UART_init(EUSCI_A0_BASE, ¶m))
  69.         return;
  70.     EUSCI_A_UART_enable(EUSCI_A0_BASE);
  71.     EUSCI_A_UART_clearInterrupt(EUSCI_A0_BASE,
  72.                                 EUSCI_A_UART_RECEIVE_INTERRUPT);
  73.     // Enable USCI_A0 RX interrupt
  74.     EUSCI_A_UART_enableInterrupt(EUSCI_A0_BASE,EUSCI_A_UART_RECEIVE_INTERRUPT); // Enable interrupt
  75.      
  76. }


  77. int main(void) {
  78.   // Stop WDT
  79.         WDTCTL = WDTPW + WDTHOLD;
  80.         PMM_unlockLPM5();
  81.         Init_Clock();
  82.         Init_UART1();
  83.         Ini_Lcd();
  84.      __enable_interrupt(); // Enable globale interrupt  
  85.     // lcd_pos(0,0);
  86.     // Disp_HZ("串口测试",4);Send(1,':');
  87.     while (1)
  88.     {         
  89.        if(check1==1)
  90.           {
  91.             GPIO_toggleOutputOnPin( GPIO_PORT_P1,GPIO_PIN0 );  //翻转P1.0状态           
  92.              __delay_cycles( 40 );
  93.             // if(RXData1-0x30<=4)//只有接收到0~4 才能传给command
  94.             
  95.                command=RXData1-0x30;
  96.             
  97.              //TXData1 = RXData1+1;                        
  98.             // EUSCI_A_UART_transmitData(EUSCI_A0_BASE,TXData1);   
  99.                                  
  100.              check1=0;
  101.             
  102.          
  103.         }
  104.          else
  105.          {   
  106.            if(command>=4)
  107.           {
  108.             if(t1==0)//初次进入清屏
  109.               {
  110.                 Ini_Lcd(); t1=1;
  111.               }
  112.                lcd_pos(0,0);Disp_HZ("命令超出范围",6);
  113.                lcd_pos(2,0);Disp_HZ("当前命令",4); Send(1,':');Send(1,command+0x30); //进入串口调试模式   
  114.                lcd_pos(4,2);Disp_HZ("请输入",3); Send(1,':');Send(1,'0');Send(1,'-');Send(1,'4');//0~4

  115.           }
  116.             if(command<4)
  117.             {  t1=0; }
  118.             
  119.             framLog(command);
  120.             
  121.          
  122.           }
  123.          
  124.       
  125.    
  126.         __no_operation();
  127.     }
  128. }

  129. /*
  130. * ADC12 Interrupt Service Routine
  131. * Exits LPM3 when Temperature/Voltage data is ready
  132. */
  133. #pragma vector = ADC12_VECTOR
  134. __interrupt void ADC12_ISR(void)
  135. {
  136.   switch(__even_in_range(ADC12IV,76))
  137.   {
  138.     case  ADC12IV_NONE:       break;           // Vector  0:  No interrupt
  139.     case  ADC12IV_ADC12OVIFG: break;          // Vector  2:  ADC12MEMx Overflow
  140.     case  ADC12IV_ADC12TOVIFG: break;         // Vector  4:  Conversion time overflow
  141.     case  ADC12IV_ADC12HIIFG: break;          // Vector  6:  ADC12HI
  142.     case  ADC12IV_ADC12LOIFG: break;          // Vector  8:  ADC12LO
  143.     case ADC12IV_ADC12INIFG: break;           // Vector 10:  ADC12IN
  144.     case ADC12IV_ADC12IFG0:                   // Vector 12:  ADC12MEM0
  145.         ADC12IFGR0 &= ~ADC12IFG0;             // Clear interrupt flag
  146.         __bic_SR_register_on_exit(LPM3_bits); // Exit active CPU
  147.         break;
  148.     case ADC12IV_ADC12IFG1:                   // Vector 14:  ADC12MEM1
  149.         ADC12IFGR0 &= ~ADC12IFG1;             // Clear interrupt flag
  150.         __bic_SR_register_on_exit(LPM3_bits); // Exit active CPU
  151.         break;
  152.     case ADC12IV_ADC12IFG2:
  153.         ADC12IFGR0 &= ~ADC12IFG2;             // Clear interrupt flag
  154.         __bic_SR_register_on_exit(LPM3_bits); // Exit active CPU
  155.       break;            // Vector 16:  ADC12MEM2
  156.     case ADC12IV_ADC12IFG3:ADC12IFGR0 &= ~ADC12IFG3;             // Clear interrupt flag
  157.         __bic_SR_register_on_exit(LPM3_bits); // Exit active CPU
  158.         break;            // Vector 18:  ADC12MEM3
  159.     case ADC12IV_ADC12IFG4: break;            // Vector 20:  ADC12MEM4
  160.     case ADC12IV_ADC12IFG5: break;            // Vector 22:  ADC12MEM5
  161.     case ADC12IV_ADC12IFG6: break;            // Vector 24:  ADC12MEM6
  162.     case ADC12IV_ADC12IFG7: break;            // Vector 26:  ADC12MEM7
  163.     case ADC12IV_ADC12IFG8: break;            // Vector 28:  ADC12MEM8
  164.     case ADC12IV_ADC12IFG9: break;            // Vector 30:  ADC12MEM9
  165.     case ADC12IV_ADC12IFG10: break;           // Vector 32:  ADC12MEM10
  166.     case ADC12IV_ADC12IFG11: break;           // Vector 34:  ADC12MEM11
  167.     case ADC12IV_ADC12IFG12: break;           // Vector 36:  ADC12MEM12
  168.     case ADC12IV_ADC12IFG13: break;           // Vector 38:  ADC12MEM13
  169.     case ADC12IV_ADC12IFG14: break;           // Vector 40:  ADC12MEM14
  170.     case ADC12IV_ADC12IFG15: break;           // Vector 42:  ADC12MEM15
  171.     case ADC12IV_ADC12IFG16: break;           // Vector 44:  ADC12MEM16
  172.     case ADC12IV_ADC12IFG17: break;           // Vector 46:  ADC12MEM17
  173.     case ADC12IV_ADC12IFG18: break;           // Vector 48:  ADC12MEM18
  174.     case ADC12IV_ADC12IFG19: break;           // Vector 50:  ADC12MEM19
  175.     case ADC12IV_ADC12IFG20: break;           // Vector 52:  ADC12MEM20
  176.     case ADC12IV_ADC12IFG21: break;           // Vector 54:  ADC12MEM21
  177.     case ADC12IV_ADC12IFG22: break;           // Vector 56:  ADC12MEM22
  178.     case ADC12IV_ADC12IFG23: break;           // Vector 58:  ADC12MEM23
  179.     case ADC12IV_ADC12IFG24: break;           // Vector 60:  ADC12MEM24
  180.     case ADC12IV_ADC12IFG25: break;           // Vector 62:  ADC12MEM25
  181.     case ADC12IV_ADC12IFG26: break;           // Vector 64:  ADC12MEM26
  182.     case ADC12IV_ADC12IFG27: break;           // Vector 66:  ADC12MEM27
  183.     case ADC12IV_ADC12IFG28: break;           // Vector 68:  ADC12MEM28
  184.     case ADC12IV_ADC12IFG29: break;           // Vector 70:  ADC12MEM29
  185.     case ADC12IV_ADC12IFG30: break;           // Vector 72:  ADC12MEM30
  186.     case ADC12IV_ADC12IFG31: break;           // Vector 74:  ADC12MEM31
  187.     case ADC12IV_ADC12RDYIFG: break;          // Vector 76:  ADC12RDY
  188.     default: break;
  189.   }
  190. }

  191. /*
  192. * Timer0_A3 Interrupt Vector (TAIV) handler
  193. * Used to trigger ADC conversion every 0.125 seconds
  194. *
  195. */
  196. #pragma vector=TIMER0_A0_VECTOR
  197. __interrupt void TIMER0_A0_ISR(void)
  198. {
  199.     __bic_SR_register_on_exit(LPM3_bits); // Exit active CPU
  200. }

  201. /*
  202. * USCI_A0 Interrupt Service Routine that receives PC GUI's commands
  203. */
  204. #pragma vector = USCI_A0_VECTOR
  205. __interrupt void USCI_A0_ISR(void)
  206. {
  207.     switch (__even_in_range(UCA0IV, USCI_UART_UCTXCPTIFG)) {
  208.         case USCI_NONE: break;
  209.         case USCI_UART_UCRXIFG:
  210.          RXData1 = EUSCI_A_UART_receiveData(EUSCI_A0_BASE);               
  211.           check1 = 1;
  212.            // __bic_SR_register_on_exit(LPM3_bits); // Exit active CPU
  213.             break;
  214.         case USCI_UART_UCTXIFG: break;
  215.         case USCI_UART_UCSTTIFG: break;
  216.         case USCI_UART_UCTXCPTIFG: break;
  217.     }
  218. }
复制代码

吐血分享,下载务必点赞。。。

123.jpg (29.47 KB, 下载次数: 5)

程序文件夹

程序文件夹

IAR工程文件.jpg (23.71 KB, 下载次数: 4)

IAR工程文件.jpg

OutOfBox_MSP430FR5969.zip

6.11 MB, 下载次数: 95

售价: 1 分芯积分  [记录]

msp430fr5969多通道AD采集程序+12864串行显示程序+串口调试程序

最新回复

学习了,感谢分享   详情 回复 发表于 2022-1-10 21:06
 
点赞 关注(3)

回复
举报

530

帖子

4

TA的资源

一粒金砂(高级)

沙发
 
  此贴 应坛友:ytm1987  貌似是个新的坛友 之邀 分享给大家。
 
 

回复

6066

帖子

92

TA的资源

裸片初长成(初级)

板凳
 
谢谢分享,我先来点个赞

点评

哈哈  详情 回复 发表于 2015-12-18 11:38
 
 
 

回复

530

帖子

4

TA的资源

一粒金砂(高级)

4
 
maylove 发表于 2015-12-18 11:23
谢谢分享,我先来点个赞

哈哈
 
 
 

回复

574

帖子

11

TA的资源

一粒金砂(高级)

5
 
顶!。。。。
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

6
 
非常感谢lz的分享,好人一生平安
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

7
 
下载看看
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

8
 
给力给力 点赞

点评

你要等级的话,回复字数一定要到达一定的字数,你才会有积分的说,所以你懂得  详情 回复 发表于 2016-8-23 10:08
 
 
 

回复

348

帖子

0

TA的资源

一粒金砂(高级)

9
 
赞赞赞赞赞赞赞赞
赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞
赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞
赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞
赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞
赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞
 
 
 

回复

348

帖子

0

TA的资源

一粒金砂(高级)

10
 

你要等级的话,回复字数一定要到达一定的字数,你才会有积分的说,所以你懂得
 
 
 

回复

13

帖子

0

TA的资源

一粒金砂(中级)

11
 
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(初级)

12
 
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(初级)

13
 
内容不错,很详细,支持!
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

14
 
666,谢谢热心分享
 
 
 

回复

13

帖子

0

TA的资源

一粒金砂(中级)

15
 
真不错.顶一个.
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

16
 
顶一个
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

17
 

学习,谢谢分享。

 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

18
 

学习,谢谢分享。

 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

19
 

学习了,感谢分享

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表