历史上的今天
今天是:2024年10月19日(星期六)
2019年10月19日 | 使用excel制作的AVR寄存器配置助手---轻松搞定AVR
2019-10-19 来源:eefocus
/***********************************************************
-功能描述:开机初始化
-参数说明:无
-返回说明:无
***********************************************************/
void Init_Start(void)
{
ADC_InitTypeDef ADC_InitStruct;
/*ADC配置*/
ADC_InitStruct.refSource = REF_INT; //内部基准源
ADC_InitStruct.dataAlign = AD_LEFT; //ADC数据为左对齐
ADC_InitStruct.channel = 7;
ADC_InitStruct.prescaler = CK_PS32; //32预分频
ADC_InitStruct.adcEnabled=1; //使能ADC
ADC_Init(&ADC_InitStruct);
#ifndef _AVR_ADC_H
#define _AVR_ADC_H
#include "my_define.h"
#define ADC_PRECL(x) st(ADCSR &= 0xf8;ADCSR |= (x);)
#define ADC_EN() st(ADCSR |= BV(ADEN);)
#define ADC_CLOSE() st(ADCSR &= ~BV(ADEN);)
#define ADC_START() st(ADCSR |= BV(ADSC);)
#define ADC_END() (ADCSR & BV(ADSC))
enum
{
REF_EXT = 0,
REF_VCC = 1,
REF_INT = 3,
AD_LEFT = 1,
AD_RIGHT = 0,
CONT_MOD = 1,
ONCE_MOD = 0,
CK_PS2 = 1,
CK_PS4,
CK_PS8,
CK_PS16,
CK_PS32,
CK_PS64,
CK_PS128,
};
typedef struct
{
uint8 channel : 4;
uint8 def : 1;
uint8 dataAlign : 1;
uint8 refSource : 2;
uint8 prescaler : 3;
uint8 adcIE : 1;
uint8 def1 : 1;
uint8 convertMod: 1;
uint8 start : 1;
uint8 adcEnabled: 1;
}ADC_InitTypeDef;
void ADC_Init(ADC_InitTypeDef *parameter);
#endif
这事情得从去年说起,去年学了AVR单片机后来又学了CC2530。当想用AVR做个项目时要使用定时器,突然感觉到头脑一片空白,完全忘记如何配置定时器,看来只能查看手册了。不知道是不是网速有像51助手一样的软件可以方便寄存器的配置,百度了下确实有。下载后才发现没有定时器的初始化配置,最后还是把定时器功能和寄存器花时间看了一遍。这让我很郁闷,萌发了自己写一个配置软件。我只学过VB,就打算用VB编写一个。但是装个VB又跟CAD冲突,真是烦人。之后想到了STM32库函数的做法,就用ADC的初始化试下好不好用。做法如下:
使用过程中还是感觉到不明了。需要打开头文件查看,而且配置的东西多。得再找办法,突然想到excel可以用VBA,可以还是犹豫,现在很多人用的是wps,都没有安装VBA开发插件,如果分享给他人用就麻烦了。试着能不能只用公式就可以实现。折腾了一个晚上写了一个USART的寄存器配置
使用效果和网站下载的单片机助手差不多,心血来潮就想把所有的外设模块配置都写出来。在这个过程中并不容易,特别是定时器的设置,T1的设置项比较麻烦,但我以根据自己的理解已经把T1和T2的设置选项做了分类。每个模块写出来后还要反复试验测试看下每个设置项会不会有错误。对于一些配置非常简单且不需要修改的模块就没必要做了,例如看门狗,EEPROM等。TWI也不打算做了,因为初始化不能主要是使用麻烦,很多状态要处理。整个excel的设计花了将近二十天的时间,有很大部分时间是用来看手册的和测试的。
有了外设的初始化配置又开始在想能不能写一个比较通用的模块操作文件,可以重复使用就节省了很多时间。又忙碌了一个星期(特别是TWI花了我很大的精力,所以我并不喜欢AVR的TWI)。
这些模块的操作代码有些是在学习的时候写的,只需做了整理,但是肯定是存在不足之处的,所以只作为入门学习的参考使用。下面还是具体介绍下是怎么使用的:
假设使用的是我写的模块操作文件,这写文件都是没有初始化函数的。首先就需要用AVR配置工具生成初始化函数(建议新建一个C文件专门用于存放初始化函数)。打开“Atmega8a寄存器配置文件”,这个文件是参考m8a写的所以就叫这个名字了。在文件的下方有八个工作表,第一个是帮助,里面是关于使用的说明。后面是外设的寄存器配置表格。单击相应进行配置设置。
设置区中灰色打底的是可以选择设置的,橙色打底的是一些重要的说明。小黑点打底的设置项是要求必须按顺序依次设置。设置完后就可以选中代码生成区中的代码进行复制,执行复制后选择区会出现蚂蚁线。再粘贴到自己的C文件中即可。
注明:模块的操作文件是在IAR的开发环境写的,不是使用IAR的朋友需要自己更改下才能使用。Excel的寄存器配置文件可能有些开发平台对于个别寄存器的命名会有所差异,可以通知我修改。
史海拾趣
|
被动安全系统方面 被动安全系统是指在交通事故发生后尽量减小损伤的安全系统,包括对乘客和行人的保护。 福特公司通过不断创新,推出先进的乘客约束系统和安全气囊技术,在乘员保护方面 ...… 查看全部问答> |
|
怎么一进中断I/O的状态就改变了,我在中断里面读取I/O的状态,怎么跟示波器显示的不一样? 怎么一进中断I/O的状态就改变了,我在中断里面读取I/O的状态,怎么跟示波器显示的不一样?… 查看全部问答> |
|
各位大哥大姐: 小弟求教! WinCE操作系统镜像生成以后,希望可以将其下载到Flash中,在以后系统复位或者重新上电以后,WinCE操作系统可以自动运行。可是,当我把镜像文件下载到Flash中后,却启动不起来,请问: &n ...… 查看全部问答> |
|
不知不觉已经wince驱动快一周年,写点学习经验,顺便散分,嘿嘿 刚洗完澡,头发未干,精神抖擞。想起自己快毕业一年了,特别来劲,情不自禁的在键盘上敲打起来。 我清楚的记得,我是2008.07.01被“轰出”校门的,然后申请了延迟离校,才可以在学校住宿,但是手里有几千块钱,于是就跑 ...… 查看全部问答> |
|
我现在手头上有一个老款白盒子的那种合众达的仿真器,下载速度比较慢,想换一个。合众达有了510plus版本,但是要1800,太贵了。想买这个 http://www.csmingwei.com/web/cp/dsp_xds.htm,是长沙一家公司的,他们网站上声称 “5、速度较其他仿真 ...… 查看全部问答> |




