|
[TI首届低功耗设计大赛]+使用430库开发ADC+P1.1A1通道采样控制P1.0LED2
[复制链接]
这篇是FR5969的基于430库开发ADC简单试验。
本试验和前面一个使用寄存器的ADC开发试验一样,使用是FR5969片内的P1.1管脚对应的ADC通道1也就是A1。调试的时候在中断服务函数中设置断点,在寄存器观察窗口中查看采样转换的值。如下图:
- //******************************************************************************
- // MSP430FR59xx Demo - ADC12, Sample A1, AVcc Ref, Set P1.0 if A1 > 0.5*AVcc
- //
- // 描述 :单通道采样,ADC的参考电源为AVCC,也就是芯片的电源电压。软件设置ADC12SC
- // 采样和转换寄存器,在转换完成后自动清除。在主循环中,进入LPM0低功耗模式。
- // 等待ADC的转换完成进入ADC的中断函数中,在ADC中断服务函数中将强制CPU退出
- // 低功耗模式LPM0。如果A1的转换值大于0.5AVCC,那么P1.0输出高电平,否者输出
- // 低电平。
- //
- // MSP430FR5969
- // -----------------
- // /|\| XIN|-
- // | | |
- // --|RST XOUT|-
- // | |
- // >---|P1.1/A1 P1.0|-->LED
- //
- // IC爬虫
- //
- // Sep 2014
- // Built with IAR Embedded Workbench V6.1
- //******************************************************************************
- #include "main.h"
- #include "driverlib.h"
- void Init_ADC(void);
- /*******************************************************************************
- *函数名 :int _system_pre_init
- *描述 :系统初始化,停止看门狗
- *输入 :无
- *输出 :无
- *调用 :内部调用
- ******************************************************************************/
- int _system_pre_init(void)
- {
- // Stop Watchdog timer
- WDT_A_hold(__MSP430_BASEADDRESS_WDT_A__); // Stop WDT
- /*==================================*/
- /* Choose if segment initialization */
- /* should be done or not. */
- /* Return: 0 to omit initialization */
- /* 1 to run initialization */
- /*==================================*/
- return 1;
- }
- /*******************************************************************************
- *函数名 :int main
- *描述 :主函数
- *输入 :无
- *输出 :无
- *调用 :内部调用
- ******************************************************************************/
- int main(void)
- {
- _system_pre_init(); // 停止看门狗
-
- Init_GPIO(); // 板子管脚初始化
- Init_ADC(); // ADC初始化
- while (1)
- {
-
- __delay_cycles(5000);
- ADC12_B_startConversion(ADC12_B_BASE,ADC12_B_START_AT_ADC12MEM0,ADC12_B_REPEATED_SINGLECHANNEL);
- __bis_SR_register(LPM0_bits | GIE); // 进入LPM0模式, ADC12_ISR 将使其强制退出
- __no_operation();
- }
- }
- /*******************************************************************************
- *函数名 :Init_GPIO
- *描述 :GPIO初始化,设置所有的管脚都为输出低电平
- *输入 :无
- *输出 :无
- *调用 :内部调用
- ******************************************************************************/
- void Init_GPIO(void)
- {
- // Set all GPIO pins to output low for low power
- GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
- GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
- GPIO_setOutputLowOnPin(GPIO_PORT_P3, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
- GPIO_setOutputLowOnPin(GPIO_PORT_P4, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
- GPIO_setOutputLowOnPin(GPIO_PORT_PJ, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7|GPIO_PIN8|GPIO_PIN9|GPIO_PIN10|GPIO_PIN11|GPIO_PIN12|GPIO_PIN13|GPIO_PIN14|GPIO_PIN15);
- GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
- GPIO_setAsOutputPin(GPIO_PORT_P2, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
- GPIO_setAsOutputPin(GPIO_PORT_P3, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
- GPIO_setAsOutputPin(GPIO_PORT_P4, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
- GPIO_setAsOutputPin(GPIO_PORT_PJ, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7|GPIO_PIN8|GPIO_PIN9|GPIO_PIN10|GPIO_PIN11|GPIO_PIN12|GPIO_PIN13|GPIO_PIN14|GPIO_PIN15);
-
- //P1.1 - A1
- GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN1);
- GPIO_setAsInputPin(GPIO_PORT_P1, GPIO_PIN1);
- //GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P1,GPIO_PIN1,GPIO_SECONDARY_MODULE_FUNCTION);
-
- PMM_unlockLPM5();// 关闭上电端口默认输出高阻抗的功能,使能上电保持起始设置
- }
- /*******************************************************************************
- *函数名 Init_ADC
- *描述 :ADC初始化,
- *输入 :无
- *输出 :无
- *调用 :内部调用
- ******************************************************************************/
- void Init_ADC(void)
- {
- ADC12_B_init(ADC12_B_BASE, //ADC12_B的基地址
- ADC12_B_SAMPLEHOLDSOURCE_SC, //采样保持信号源选择默认,也就是ADC12SHS_0
- ADC12_B_CLOCKSOURCE_ADC12OSC, //ADC12_B模块的时钟源默认,来自UCS
- ADC12_B_CLOCKDIVIDER_1, //时钟源不分频
- ADC12_B_CLOCKPREDIVIDER__1, //时钟源预分配器不分频
- ADC12_B_MAPINTCH1); //
-
- ADC12_B_enable(ADC12_B_BASE); //使能ADC12_B模块
-
- ADC12_B_setupSamplingTimer(ADC12_B_BASE, //
- ADC12_B_CYCLEHOLD_16_CYCLES, //
- ADC12_B_CYCLEHOLD_16_CYCLES, //
- ADC12_B_MULTIPLESAMPLESDISABLE); //
-
- ADC12_B_memoryConfigure(ADC12_B_BASE, //
- ADC12_B_MEMORY_0, //
- ADC12_B_INPUT_A1, //通道选择A1
- ADC12_B_VREFPOS_AVCC_VREFNEG_VSS, //参考电压为AVCC
- ADC12_B_NOTENDOFSEQUENCE, //
- ADC12_B_WINDOW_COMPARATOR_DISABLE,//
- ADC12_B_DIFFERENTIAL_MODE_DISABLE);//
-
- ADC12_B_enableInterrupt(ADC12_B_BASE,ADC12_B_IE0,0,0); //使能中断
-
- __enable_interrupt();// Enable globale interrupt //
- }
- #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
- #pragma vector = ADC12_VECTOR
- __interrupt void ADC12_ISR(void)
- #elif defined(__GNUC__)
- void __attribute__ ((interrupt(ADC12_VECTOR))) ADC12_ISR (void)
- #else
- #error Compiler not supported!
- #endif
- {
- switch(__even_in_range(ADC12IV, ADC12IV_ADC12RDYIFG))
- {
- case ADC12IV_NONE: break; // Vector 0: No interrupt
- case ADC12IV_ADC12OVIFG: break; // Vector 2: ADC12MEMx Overflow
- case ADC12IV_ADC12TOVIFG: break; // Vector 4: Conversion time overflow
- case ADC12IV_ADC12HIIFG: break; // Vector 6: ADC12BHI
- case ADC12IV_ADC12LOIFG: break; // Vector 8: ADC12BLO
- case ADC12IV_ADC12INIFG: break; // Vector 10: ADC12BIN
- case ADC12IV_ADC12IFG0: // Vector 12: ADC12MEM0 Interrupt
- if (ADC12MEM0 >= 0x7ff) // ADC12MEM0 = A1 > 0.5AVcc?
- P1OUT |= BIT0; // P1.0 = 1
- else
- P1OUT &= ~BIT0; // P1.0 = 0
- __bic_SR_register_on_exit(LPM0_bits); // Exit active CPU
- break; // Clear CPUOFF bit from 0(SR)
- case ADC12IV_ADC12IFG1: break; // Vector 14: ADC12MEM1
- case ADC12IV_ADC12IFG2: break; // Vector 16: ADC12MEM2
- case ADC12IV_ADC12IFG3: break; // Vector 18: ADC12MEM3
- case ADC12IV_ADC12IFG4: break; // Vector 20: ADC12MEM4
- case ADC12IV_ADC12IFG5: break; // Vector 22: ADC12MEM5
- case ADC12IV_ADC12IFG6: break; // Vector 24: ADC12MEM6
- case ADC12IV_ADC12IFG7: break; // Vector 26: ADC12MEM7
- case ADC12IV_ADC12IFG8: break; // Vector 28: ADC12MEM8
- case ADC12IV_ADC12IFG9: break; // Vector 30: ADC12MEM9
- case ADC12IV_ADC12IFG10: break; // Vector 32: ADC12MEM10
- case ADC12IV_ADC12IFG11: break; // Vector 34: ADC12MEM11
- case ADC12IV_ADC12IFG12: break; // Vector 36: ADC12MEM12
- case ADC12IV_ADC12IFG13: break; // Vector 38: ADC12MEM13
- case ADC12IV_ADC12IFG14: break; // Vector 40: ADC12MEM14
- case ADC12IV_ADC12IFG15: break; // Vector 42: ADC12MEM15
- case ADC12IV_ADC12IFG16: break; // Vector 44: ADC12MEM16
- case ADC12IV_ADC12IFG17: break; // Vector 46: ADC12MEM17
- case ADC12IV_ADC12IFG18: break; // Vector 48: ADC12MEM18
- case ADC12IV_ADC12IFG19: break; // Vector 50: ADC12MEM19
- case ADC12IV_ADC12IFG20: break; // Vector 52: ADC12MEM20
- case ADC12IV_ADC12IFG21: break; // Vector 54: ADC12MEM21
- case ADC12IV_ADC12IFG22: break; // Vector 56: ADC12MEM22
- case ADC12IV_ADC12IFG23: break; // Vector 58: ADC12MEM23
- case ADC12IV_ADC12IFG24: break; // Vector 60: ADC12MEM24
- case ADC12IV_ADC12IFG25: break; // Vector 62: ADC12MEM25
- case ADC12IV_ADC12IFG26: break; // Vector 64: ADC12MEM26
- case ADC12IV_ADC12IFG27: break; // Vector 66: ADC12MEM27
- case ADC12IV_ADC12IFG28: break; // Vector 68: ADC12MEM28
- case ADC12IV_ADC12IFG29: break; // Vector 70: ADC12MEM29
- case ADC12IV_ADC12IFG30: break; // Vector 72: ADC12MEM30
- case ADC12IV_ADC12IFG31: break; // Vector 74: ADC12MEM31
- case ADC12IV_ADC12RDYIFG: break; // Vector 76: ADC12RDY
- default: break;
- }
- }
复制代码
2-ADC-P1.1A1-库.rar
(549.44 KB, 下载次数: 8, 售价: 2 分芯积分)
|
|