ARM基础--ADC,RTC,PWM实验

本文详细介绍了在基于ARM-A9开发板上进行ADC、RTC和PWM的寄存器配置实验。通过示例代码展示了如何初始化和操作ADC进行模拟信号到数字信号的转换,RTC的实时时钟设置以及PWM信号的频率和占空比配置。实验涵盖了从基本概念到具体实践的步骤,以控制LED灯和实现电机控制等功能。
摘要由CSDN通过智能技术生成

目录

ADC介绍

ADC实验

基于ARM-A9开发板的寄存器配置ADC实验

RTC介绍

基于ARM-A9开发板的寄存器配置RTC实验

PWM介绍

基于ARM-A9开发板的寄存器配置PWM实验


ADC介绍

ADC(Analog to Digital Converter)即模数转换器,指一个能将模拟信号转化为数字信号的电子元件。

 ADC的分辨率一般以输出二进制数的位数来表示,当最大输入电压一定时,位数越高,分辨率越高; n位的ADC能区分输入电压的最小值为满量程输入的1/2^n; 比如一个12位的ADC,最大输入电压为1.8v,那么该ADC能区分的最小电压为1.8v/2^12≈0.00044v,当转换的结果为m时,则实际的电压值为m*(1.8v/2^12);

ADC实验

ARM的ADC实验可以通过以下步骤进行:

  1. 确定所使用的ARM芯片的ADC参数,包括采样精度、采样速率、电压参考等。

  2. 编写相应的C代码,初始化ADC,并进行采样和转换。

  3. 根据所采集的数据,进行相应的处理和分析,例如数据可视化、信号检测等

基于ARM-A9开发板的寄存器配置ADC实验

#include "exynos_4412.h"

void delay(unsigned int time){
        while(time--);
}
int main()
{
        //设置ADC转换
        ADCCON = ADCCON | (1 <<16);
        // 使能分频器
        ADCCON = ADCCON | (1 <<14);
        // 设置分屏器为
        ADCCON = ADCCON & (~(0xFF <<6)) | (19 << 6);
        // 关闭待机模式
        ADCCON = ADCCON & (~(1 << 2));
        // 关闭通过ad转换
        ADCCON = ADCCON & (~(1 << 1));
        // 选择通道3
        ADCMUX = 3;

        unsigned int AdcVal = 0;
        // 使能LED灯
        GPX2.CON = GPX2.CON & (~(0xF << 28)) | (0x1 << 28);
        GPX1.CON = GPX1.CON & (~(0xF << 0)) | (0x1 << 0);
        GPF3.CON = GPF3.CON & (~(0xFF << 16)) | (0x11 << 16);

        while(1){
                // 开始转换
                ADCCON = ADCCON | 1;
                // 等待转换
                while(!(ADCCON & (1 << 15)));
                // 读取结果
                AdcVal = ADCDAT & 0xFFF;
                // 将结果转换为MV
                AdcVal = AdcVal * 0.44;

                if ( AdcVal >= 1501  & AdcVal <= 1800 ){
                        GPX2.DAT = GPX2.DAT | (1 << 7);
                        GPX1.DAT = GPX1.DAT | (1 << 0);
                        GPF3.DAT = GPF3.DAT | (1<< 4);
                        GPF3.DAT = GPF3.DAT | (1 << 5);
                }
                if ( AdcVal >= 1000 & AdcVal <= 1500  ){
                        GPX2.DAT = GPX2.DAT | (1 << 7);
                        GPX1.DAT = GPX1.DAT | (1 << 0);
                        GPF3.DAT = GPF3.DAT | (1<< 4);
                        GPF3.DAT = GPF3.DAT & (~(1 <<5));
                }
                if (AdcVal >= 501 & AdcVal <= 1000){
                        GPX2.DAT = GPX2.DAT | (1 << 7);
                        GPX1.DAT = GPX1.DAT | (1 << 0);
                        GPF3.DAT = GPF3.DAT & (~(1<< 4));
                        GPF3.DAT = GPF3.DAT & (~(1<< 5));
                }

                if (AdcVal >= 0 & AdcVal <= 500){
                        GPX2.DAT = GPX2.DAT | (1 << 7);
                        GPX1.DAT = GPX1.DAT & (~(1 << 0));
                        GPF3.DAT = GPF3.DAT & (~(1<< 4));
                        GPF3.DAT = GPF3.DAT & (~(1<< 5));
                        delay(10000000);
                        GPX2.DAT = GPX2.DAT & (~(1 <<7));
                        delay(10000000);

                }
        }

        return 0;

}

RTC介绍

ARM的RTC(实时时钟)是一种低功耗时钟设备,通常用于计算机、嵌入式系统和其他电子设备中。RTC的主要作用是提供准确的时间和日期信息,甚至在系统关闭或断电时也能继续运行。

ARM处理器通常内置有RTC,它可以提供准确的实时时钟和日期信息。RTC通常由一个晶体振荡器和一个计数器组成,晶体振荡器用于提供时钟信号,计数器用于计数。

ARM的RTC通常有以下特点:

  1. 低功耗:RTC使用非常少的电量,通常在微安级别。

  2. 高稳定性:RTC使用晶体振荡器作为时钟源,保持高精度的时序稳定性。

  3. 精确度高:RTC通常具有高精度的时钟源,能够提供准确的日期和时间信息。

  4. 能够在系统关机或断电时保持时间信息:RTC内置有电池备份电源,即使在系统关闭或断电时也能继续运行。

在ARM处理器中使用RTC,可以实现各种应用,例如定时、日历、时间戳等。RTC还可以用于电子设备的电源管理,以及控制其他设备的开关时间。

基于ARM-A9开发板的寄存器配置RTC实验

#include "exynos_4412.h"
 
int main()
{
	unsigned int Oldsec = 0, Newsec = 0;
    //使能RTC控制
    RTCCON = RTCCON | 1;
    //校准时间
    RTC.BCDYEAR = 0x023; //000000100011  2023
    RTC.BCDMON  = 0x1;   //1
    RTC.BCDDAY  = 0x5;   //5
    RTC.BCDWEEK = 0x7;   //星期四
    RTC.BCDHOUR = 0x11;  //11
    RTC.BCDMIN  = 0x32;  //32
    RTC.BCDSEC  = 0x50;  //50s
 
    //关闭RTC控制
    RTCCON = RTCCON & 0;
 
    while(1)
    {
		Newsec = RTC.BCDSEC;
		if(Newsec != Oldsec)
		{
        	printf("%x-%x-%x %x %x:%x:%x\n",RTC.BCDYEAR,RTC.BCDMON,RTC.BCDDAY,RTC.BCDWEEK,RTC.BCDHOUR,RTC.BCDMIN,RTC.BCDSEC);
		
			Oldsec = Newsec;				
 
		}   
	}
 
	return 0;
}

PWM介绍

PWM(Pulse Width Modulation)是一种调节脉冲信号占空比的方法,常用于控制电机、LED灯等电路的亮度或速度等参数。在ARM处理器中,一些GPIO引脚有特殊的PWM功能,通过编程可以实现PWM信号的输出。

ARM处理器的PWM输出主要有以下几个方面的参数:

  1. 频率(Frequency):PWM信号的频率是可以调节的,并且常用的频率有几个标准的值可供选择。

  2. 占空比(Duty Cycle):PWM信号的占空比决定了信号高电平和低电平的持续时间,从而影响了PWM信号控制的电路的亮度或速度等参数。

  3. 时钟源(Clock Source):PWM信号的频率需要一个时钟源作为基准,ARM处理器的时钟源有内部时钟、外部时钟等多种选择。

  4. 输出通道(Output Channel):ARM处理器的PWM功能通常支持多个输出通道,每个通道可以控制一个电路的PWM信号。

ARM处理器的PWM功能可以通过配置GPIO引脚,设置PWM信号的频率、占空比等参数,使得电路可以根据PWM信号的控制发生相应的变化,如电机运动速度的变化、LED灯亮度的变化等。需要注意的是,不同的ARM处理器可能会有不同的PWM输出配置和驱动程序,需要根据具体的硬件平台和应用需求进行选择和开发。

基于ARM-A9开发板的寄存器配置PWM实验

#include "exynos_4412.h"
 
void delay(unsigned int time)
{
	while(time --);
}
 
int main()
{
    //GPD0_0设置PWM0输出功能
    GPD0.CON = GPD0.CON & (~(0xF)) | (0x2);
    //PWM0一级分频  100倍
    PWM.TCFG0 = PWM.TCFG0 & (~(0xFF)) | (99);
    //PWM0二级分频  1倍  PCLk/(99+1)/(0+1) = 1MHz
    PWM.TCFG1 = PWM.TCFG1 & (~(0xF));
    //设置PWM0自动重装 
    PWM.TCON = PWM.TCON | (1<<3);
    //设置周期 1000
    PWM.TCNTB0 = 1000;
    //占空比 60%
    PWM.TCMPB0 = 600;
    //手动装载
    PWM.TCON = PWM.TCON | (1 << 1);
    //关闭手动装载
    PWM.TCON = PWM.TCON & (~(1 << 1));
    //使能PWM0
    PWM.TCON = PWM.TCON | 1;
 
    while(1)
    {
        PWM.TCON = PWM.TCON | 1;
		delay(100000);
		PWM.TCON = PWM.TCON & (~(1));
		delay(100000);
    }
    
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值