查看: 5960|回复: 8

[原创] LPC824 lite入门教程七 ADC

[复制链接]
  • TA的每日心情
    开心
    2020-6-18 08:45
  • 签到天数: 812 天

    连续签到: 1 天

    [LV.10]以坛为家III

    66

    主题

    4899

    帖子

    64

    金牌会员

    Rank: 6Rank: 6

    积分
    6321
    最后登录
    2025-7-15
    发表于 2016-11-10 22:58:19 | 显示全部楼层 |阅读模式
    本节我们讲解LPC824的ADC功能,LPC824的ADC特性如下:
    QQ截图20161110223724.png QQ截图20161110223758.png QQ截图20161110223808.png QQ截图20161110223819.png QQ截图20161110223827.png QQ截图20161110223837.png QQ截图20161110223845.png QQ截图20161110223852.png
    int main(void)
    {
            uint32_t rawSample;
            int j;

            SystemCoreClockUpdate();
            Board_Init();
            DEBUGSTR("ADC sequencer demo\r\n");
            DEBUGOUT("System Clock: %uMHz\r\n", SystemCoreClock / 1000000);
            DEBUGOUT("Device ID: 0x%x\r\n", Chip_SYSCTL_GetDeviceID());

            /* Setup ADC for 12-bit mode and normal power */
            Chip_ADC_Init(LPC_ADC, 0);//初始化ADC为12位,正常供电模式

            /* Need to do a calibration after initialization and trim */
            Chip_ADC_StartCalibration(LPC_ADC);//校准ADC
            while (!(Chip_ADC_IsCalibrationDone(LPC_ADC))) {}//等待ADC校准完成
            /* Setup sequencer A for ADC channel 3, EOS interrupt */
            /* Setup a sequencer to do the following:
               Perform ADC conversion of ADC channels 3 only */
            Chip_ADC_SetupSequencer(LPC_ADC, ADC_SEQA_IDX,
                                                            (ADC_SEQ_CTRL_CHANSEL(BOARD_ADC_CH) | ADC_SEQ_CTRL_MODE_EOS));

            /* Enable the clock to the Switch Matrix */
            Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_SWM);//使能开关矩阵时钟

            /* Configure the SWM for P0-23 as the input for the ADC1 */
            Chip_SWM_EnableFixedPin(SWM_FIXED_ADC3);//配置P0-23为ADC1输入脚

            /* Disable the clock to the Switch Matrix to save power */
            Chip_Clock_DisablePeriphClock(SYSCTL_CLOCK_SWM);//关闭开关矩阵时钟节能


            /* Setup threshold 0 low and high values to about 25% and 75% of max */
            Chip_ADC_SetThrLowValue(LPC_ADC, 0, ((1 * 0xFFF) / 4));//设置ADC最低转换门限有25%
            Chip_ADC_SetThrHighValue(LPC_ADC, 0, ((3 * 0xFFF) / 4));//设置ADC最高转换门限有75%

            /* Clear all pending interrupts */
            Chip_ADC_ClearFlags(LPC_ADC, Chip_ADC_GetFlags(LPC_ADC));//清除ADC中断标志

            /* Enable ADC overrun and sequence A completion interrupts */
            Chip_ADC_EnableInt(LPC_ADC, (ADC_INTEN_SEQA_ENABLE | ADC_INTEN_OVRRUN_ENABLE));//使能ADC超限和转换完成中断

            /* Use threshold 0 for ADC channel and enable threshold interrupt mode for
               channel as crossing */
            Chip_ADC_SelectTH0Channels(LPC_ADC, ADC_THRSEL_CHAN_SEL_THR1(BOARD_ADC_CH));//选择门限通道
            Chip_ADC_SetThresholdInt(LPC_ADC, BOARD_ADC_CH, ADC_INTEN_THCMP_CROSSING);//使能门限中断

            /* Enable ADC NVIC interrupt */
            NVIC_EnableIRQ(ADC_SEQA_IRQn);//使能ADC NVIC

            /* Enable sequencer */
            Chip_ADC_EnableSequencer(LPC_ADC, ADC_SEQA_IDX);//使能ADC转换

            /* This example uses the periodic sysTick to manually trigger the ADC,
               but a periodic timer can be used in a match configuration to start
               an ADC sequence without software intervention. */
            SysTick_Config(SystemCoreClock / TICKRATE_HZ);

            /* Endless loop */
            while (1) {
                    /* Sleep until something happens */
                    __WFI();

                    if (thresholdCrossed) {
                            thresholdCrossed = false;
                            DEBUGSTR("********ADC threshold event********\r\n");
                    }

                    /* Is a conversion sequence complete? */
                    if (sequenceComplete) {
                            sequenceComplete = false;

                            /* Get raw sample data for channels 0-11 */
                            for (j = 0; j < 12; j++) {
                                    rawSample = Chip_ADC_GetDataReg(LPC_ADC, j);

                                    /* Show some ADC data */
                                    if (rawSample & (ADC_DR_OVERRUN | ADC_SEQ_GDAT_DATAVALID)) {
                                            DEBUGOUT("Chan: %d Val: %d\r\n", j, ADC_DR_RESULT(rawSample));
                                            DEBUGOUT("Threshold range: 0x%x ", ADC_DR_THCMPRANGE(rawSample));
                                            DEBUGOUT("Threshold cross: 0x%x\r\n", ADC_DR_THCMPCROSS(rawSample));
                                            DEBUGOUT("Overrun: %s \r\n", (rawSample & ADC_DR_OVERRUN) ? "true" : "false");
                                            DEBUGOUT("Data Valid: %s\r\n\r\n", (rawSample & ADC_SEQ_GDAT_DATAVALID) ? "true" : "false");
                                    }
                            }
                    }
            }
    }


    开心
    回复

    使用道具 举报

  • TA的每日心情
    难过
    2024-3-21 15:13
  • 签到天数: 41 天

    连续签到: 1 天

    [LV.5]常住居民I

    32

    主题

    1820

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1785
    最后登录
    2024-3-21
    发表于 2016-11-11 00:21:42 | 显示全部楼层
    每次一来就是一排排的!
    好多年没来了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-11-23 10:20
  • 签到天数: 45 天

    连续签到: 1 天

    [LV.5]常住居民I

    5

    主题

    693

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1404
    最后登录
    2025-7-18
    发表于 2016-11-11 08:55:28 | 显示全部楼层
    学习学习
    dfdfdfdfdfdfdfd dsfa222
    回复

    使用道具 举报

    该用户从未签到

    2

    主题

    6

    帖子

    0

    新手上路

    Rank: 1

    积分
    26
    最后登录
    2016-11-25
    发表于 2016-11-11 09:04:46 | 显示全部楼层
    厉害了,我的哥~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2021-7-30 13:41
  • 签到天数: 28 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    1

    主题

    161

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    387
    最后登录
    2021-12-16
    发表于 2016-11-11 09:07:27 | 显示全部楼层
    写的很详细明确,谢谢分享!!
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2017-1-24 08:47
  • 签到天数: 49 天

    连续签到: 1 天

    [LV.5]常住居民I

    0

    主题

    524

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1267
    最后登录
    2017-4-19
    发表于 2016-11-11 09:43:47 | 显示全部楼层
    谢谢                        
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2017-1-24 08:47
  • 签到天数: 49 天

    连续签到: 1 天

    [LV.5]常住居民I

    0

    主题

    524

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1267
    最后登录
    2017-4-19
    发表于 2016-11-11 09:45:53 | 显示全部楼层
    哦了                           
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-11-8 10:40
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    3

    主题

    110

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    279
    最后登录
    2016-12-30
    发表于 2016-11-11 10:03:56 | 显示全部楼层
    谢谢分享
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2022-5-13 12:47
  • 签到天数: 95 天

    连续签到: 1 天

    [LV.6]常住居民II

    3

    主题

    475

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1527
    最后登录
    2022-8-15
    发表于 2016-12-22 12:31:24 | 显示全部楼层
    受益匪浅。
    一整套组合拳,游刃有余。
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-18 22:44 , Processed in 0.102157 second(s), 27 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表