zoukankan      html  css  js  c++  java
  • LPC1788的ADC和DAC使用

    #ifndef __ADC1_H_

    #define __ADC1_H_

     

    #include "common.h"

    #include "delay.h"

     

    void adc_init(u8 ch,u8 div);

     

    u16 adc_cover(u8 ch);

     

     

     

     

    #endif

     

     

     

     

     

     

    #include "adc1.h"

     

     

     

    void adc_init(u8 ch,u8 div)//最大时钟不得大于12.4M

    {

        //打开ADC和IO口时钟

        LPC_SC->PCONP |= (1<<15)|(1<<12);

        switch(ch)

        {

        case 0:

            LPC_IOCON->P0_23 = 0x00;

            LPC_IOCON->P0_23 |= (1<<0)|(1<<8)|(1<<10);//无过滤 模拟adc 开漏

            break;

        case 1:

            LPC_IOCON->P0_24 = 0x00;

            LPC_IOCON->P0_24 |= (1<<0)|(1<<8)|(1<<10);//无过滤 模拟adc 开漏

            break;

        case 2:

            LPC_IOCON->P0_25 = 0x00;

            LPC_IOCON->P0_25 |= (1<<0)|(1<<8)|(1<<10);//无过滤 模拟adc 开漏

            break;

        case 3:

            LPC_IOCON->P0_26 = 0x00;

            LPC_IOCON->P0_26 |= (1<<0)|(1<<8)|(1<<10);//无过滤 模拟adc 开漏

            break;

        case 4:

            LPC_IOCON->P0_30 = 0x00;

            LPC_IOCON->P0_30 |= (3<<0)|(1<<8)|(1<<10);//无过滤 模拟adc 开漏

            break;

        case 5:

            LPC_IOCON->P0_31 = 0x00;

            LPC_IOCON->P0_31 |= (3<<0)|(1<<8)|(1<<10);//无过滤 模拟adc 开漏

            break;

        case 6:

            LPC_IOCON->P0_12 = 0x00;

            LPC_IOCON->P0_12 |= (3<<0)|(1<<8)|(1<<10);//无过滤 模拟adc 开漏

            break;

        case 7:

            LPC_IOCON->P0_13 = 0x00;

            LPC_IOCON->P0_13 |= (3<<0)|(1<<8)|(1<<10);//无过滤 模拟adc 开漏

            break;

        }

        LPC_ADC->CR = 0X00;

        LPC_ADC->CR |= (1<<ch)|(div<<8)|(1<<21);//正常工作 非规则转换 并选中响应通道

        LPC_ADC->INTEN = 0x00;//禁用全部中断

       

    }

     

    u16 adc_cover(u8 ch)

    {

        u16 temp;

        LPC_ADC->CR &= ~(0x000000ff);

        LPC_ADC->CR |= (1<<ch);

        LPC_ADC->CR |= 1<<24;//启动转换

        while(!(LPC_ADC->GDR &(1u<<31)));//等待转换结束

        temp = (u16)((LPC_ADC->GDR & 0x00000fff0)>>4);

        return temp;

    }

     

     

     

     

     

     

    #ifndef __ADC_H_

    #define __ADC_H_

     

    #include "common.h"

     

    #define DAC_IO_CON  LPC_IOCON->P0_26

     

    void dac_init(void);

     

    void dac_set_value(u16 value);

     

    #endif

    #include "dac.h"

     

     

    void dac_init(void)

    {

        //io口初始化

        DAC_IO_CON = 0x00;

        DAC_IO_CON |= (2<<0)|(1<<16)/*|(1<<10)*/;//使能DAC

       

        LPC_DAC->CTRL = 0x00;//双缓冲禁止,超时禁止 DMA禁止

        LPC_DAC->CR = 1<<16;

    //  LPC_DAC->CNTVAL = 100;

    }

     

     

    void dac_set_value(u16 value)

    {

        if(value > 1024)

        {

            return;

        }

        else

        {

            LPC_DAC->CR = (u16)((1<<16)|(value<<6));       

        }

    }

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    KALI LINUX 工具大全---jd-gui(爪哇反编译器-图形界面)
    KAL1 LINUX 官方文档之政策---Kali Linux更新政策
    KAL1 LINUX 官方文档之政策---Kali Linux用户政策
    KAL1 LINUX 官方文档之社区---Kali Linux官方网站
    KAL1 LINUX 官方文档之社区---为kali做贡献
    KAL1 LINUX 官方文档之社区---官方Kali Linux镜像
    KAL1 LINUX 官方文档之kali开发---自定义 Beaglebone Black 镜像
    KAL1 LINUX 官方文档之kali开发---ARM交叉编译
    KAL1 LINUX 官方文档之kali开发---实时构建自定义的Kali ISO
    KAL1 LINUX 官方文档之kali开发---生成 更新的Kali ISO
  • 原文地址:https://www.cnblogs.com/dengxiaojun/p/4338703.html
Copyright © 2011-2022 走看看