Exynos4412裸机开发综合练习

本文档介绍了一个在Exynos4412平台上进行的裸机开发综合练习,主要任务是监测电路板电压并进行报警处理。程序通过RTC定时器每秒采集一次电压值,若超过设定限制(1V~2V),则通过蜂鸣器报警,报警可由按键解除。实现涉及的头文件和函数包括adc、key、pwm、rtc和uart的相关定义与实现。
摘要由CSDN通过智能技术生成

下面是一个案例需求:

1、编写一段程序,该程序的主要功能是监控电路板上的电压值,若电压值超过当前的电压限制则通过蜂鸣器报警,通过按键解除报警;

2、其具体要求如下; 

a) 程序下载20s后,进入电压采集状态(使用RTC ALARM功能完成), 要求1s采集1次电路板电压值;(采用RTC TIME TICK完成)

b) 每次电压采集完成后,通过COM2将采集到的电压值发送到PC,在PC端可通过串口调试助手查看当前的电压值;

c) 每次电压采集完成后,比较当前的电压值是否正常正常的电压值为(1V~2V),若当前采集的电压值异常,则通过蜂鸣器发出报警信号;

d) 报警信号的解除通过电路板上的KEY2控制( 通过按下KEY2使蜂鸣器停止鸣叫);

 

下面是具体实现:

1、头文件定义

0) -- exynos_4412.h

内容过多,这里不予以展示了,在前面的文章中均可找到相关寄存器定义

1) -- adc.h

#ifndef __ADC_H_
#define __ADC_H_

void adc_init(int temp);
void adc_collect(void);

#endif

2) -- key.h

#ifndef _KEY_H_
#define _KEY_H_

void key2_init(void);

#endif

3) -- pwm.h

#ifndef __PWM_H__
#define __PWM_H__

void pwm_init(void);
void beep_on(void);
void beep_off(void);
#define SYS_SET_FREQUENCE 25000
void beep_set_frequence( unsigned int fre );

#endif

4) -- rtc.h

#ifndef _RTC_H_
#define _RTC_H_

void rtc_init(void);
void rtc_tic(void);
void rtc_alarm(void);

#endif

5) -- uart.h 

#ifndef _UART_H
#define	_UART_H

void putc(const char data);
void puts(const  char  *pstr);
void uart_init(void);

extern void putc(const char data);
extern void puts(const  char  *pstr);
extern void uart_init(void);

#endif

 

2、具体函数实现:

1) -- adc.c

/*
 * adc.c
 *
 *  Created on: 2016-2-29
 *      Author: Administrator
 */
#include "exynos_4412.h"

//ADC初始化函数
adc_init(int temp)
{
	// 初始化A/D控制寄存器
	// ADCCON [16]位置1,12bit输出;[14]位置1,允许预分频; [13:6] = 99,预分频值为99;
	// [1]位置1,采用读启动方式启动ADC;
	// A/D转换时间计算: PCLK = 100 MHZ,PRESCALER = 99,则 12 位转换时间为 100MHz/(99+1) = 1 MHZ
	ADCCON = (1 << 16 | 1 << 14 | 99 <<6 | 1 << 1);
	ADCMUX = 3; //电压输入通道选择,查看原理图,ADC连接 XadcAIN3,这里将ADCMUX = 3;
	temp = ADCDAT & 0xfff; // temp用于存放转换的数据值,由于是读启动方式启动ADC,第一次读是读不到正确值的,
						   // 所以这里先读取依次进行初始化。
}

//ADC 采集函数
adc_collect()
{
	unsigned
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值