zoukankan      html  css  js  c++  java
  • 【ARM】2410裸机系列-ADC数模转换

    开发环境

     

           1、硬件平台:FS2410

           2、主机:Ubuntu 12.04

     


    ADC寄存器配置

     

          1、初始化ADC(ADCCON)

     

           设置预分频,预分频因子,选择A/D转换通道,并选择正常模式且启动转换

          2、判断转换是否结束(ADCCON[5])

          3、读取转换结果(ADCDATn)

     

     


    串口的初始化

     

           见《串口通信·FS2410》:http://infohacker.blog.51cto.com/6751239/1223137


    源代码

          //adc.c

    #include "2410addr.h"      //头文件,包含寄存器的设置
                                          
    void putc(char ch)      //发送字符
    {
        while(!(rUTRSTAT0 & 0X2));    //判断发送缓冲区是否为空
                                               
        rUTXH0 = ch;        //发送
    }
                                          
    char getc(void)       //接收字符
    {
        while(!(rUTRSTAT0 & 0X1));     //判断接收缓冲区是否为空
                                              
        return rURXH0;      //接收
    }
                                          
    void putstr(char *str)      //发送字符串
    {
        while(*str != '')
        {
            if(*str == '
    ')
            {
                putc('
    ');
                putc('
    ');
            }
            else
                putc(*str);
                                                  
            str++;
        }
    }
                                          
    void wait(long long max)      //延迟函数
    {
        for(; max > 0; max--)
            ;
    }
                                          
    void itoa(unsigned long value)    //进行字符转换
    { 
        unsigned long temp;
        int i, flag = 0;
        char data[4];
                                              
        for(i = 0; i < 4; i++)    //清空数组
            data[i] = '';
                                          
        for(i = 0; i < 3; i++)
        {
            temp = (value >> 4 * i) & 0xf;
                                                  
            if(temp < 10)
                data[2 - i] = '0' + temp;
            else
            { 
                if(temp <= 0xf)
                    data[2 - i] = 'a' + temp - 10;
            }
        }
                                          
        putstr(" Value of AIN0 is 0x");
        putstr(data);
                                              
        putstr("
    ");
        putstr("
    ");
    }
                                          
    int main(void)
    {
        rGPHCON = rGPHCON & ~(0xf << 4) | (0xa << 4);    //配置RDX0与TDX0
        rGPHUP = 0X0c;     //设置上拉电阻
                                          
        rUFCON0 = 0;    //不用FIFO</span></span>
        rUMCON0 = 0;    //不用流控</span></span>
        rULCON0 = 0X3;  //8位数据,1个停止位,无校验,正常模式
        rUCON0 = 0X5;   //时钟源位PCLK,中断方式为查询
        rUBRDIV0 = ((int)(50000000 / 115200 / 16) - 1); //设置波特率为115200
        rADCCON = 0x4c41;  //初始化ADC
                                          
        putstr("
    This is ADC test:
    ");
                                          
        unsigned long temp = 0;
                                              
        while(1)
        {
            while((rADCCON & (1 << 15)) == 0);     //判断是否转换结束
                                          
            temp = rADCDAT0;     //读取转换值
            itoa(temp);
                                                  
            rADCCON = 0x4c41;     //再启动ADC
            wait(200000);
        }
                                          
        return 0;
    }

         //start.S

    .text
    .global _start
    _start:
    #define WATCHDOG 0x53000000
        ldr r0, =WATCHDOG
        mov r1, #0
        str r1, [r0]
                                      
        ldr sp, =1024*4
        bl main
                                      
    loop:
        b loop

         //Makefile

    adc.bin: start.S adc.c
        arm-linux-gcc -c start.S -o start.o
        arm-linux-gcc -c adc.c -o adc.o
        arm-linux-ld -Ttext 0x30008000 start.o adc.o -o adc
        arm-linux-objcopy -O binary -S adc adc.bin
                                    
    clean:
        rm -f *.o adc.bin

     


    编译链接

     

         OK,成功!

  • 相关阅读:
    Windows10 下Apache服务器搭建
    Visual Studio 2019及其注册码
    清理300多台MySQL数据库的过期binlog日志
    JS获取和设置光标的位置
    在android客户端加载html源代码总结
    OpenGL ES2学习笔记(9)-- 转换矩阵
    可行性研究报告 之机房收费系统的可行性研究报告
    eclipse 配置Maven问题解决办法:新建maven工程时报错:Could not resolve archetype org.apache.maven.archetypes .
    常见的证书格式和相互转换
    九度OJ 题目1384:二维数组中的查找
  • 原文地址:https://www.cnblogs.com/lcw/p/3159372.html
Copyright © 2011-2022 走看看