原文地址::http://blog.163.com/sunny_110119/blog/static/37068271201022992258807/
LED程序总共使用了以下头文件:
#include "BF533 Flags.h"
#include "ccblkfn.h"
#include "sysreg.h"
#include <sys\exception.h>
#include <cdefBF533.h>
#include <sys/05000311.h>
1. BF533 Flags.h
这个是用户自己写的头文件,对工程中定义的函数原型进行了统一声明,以及一些指针地址进行定义。
2. ccblkfn.h
事实上,这个头文件又包含了builin.h的头文件,builtin头文件定义了很多的内键指令,在我看来其实是很多的宏。像main函数中的第一句写寄存器sysreg_write(reg_SYSCFG, 0x32),其实最终是在builtin.h中定义的。所以我对ccblkfin.h头文件内容的推测是(因为里面的代码一老堆,有时间再看。。)一些内键指令的定义,一个显然的包括便是寄存器的读和写。应该翻译为内键还是内嵌呢?--------》内嵌宏的定义
3. sysreg.h
这个头文件内容在最开始就写的很清楚了:系统寄存器的定义。如main函数中的reg_SYSCFG就是在该头文件进行定义的,它其实是一个枚举常量。该头文件没有对R0~R7等寄存器进行定义,我想那些寄存器应该是可以直接使用的。
4. sys\exception.h
其实是exception.h,前面的sys\表明的是一个路径,是sys文件夹下的exception.h的意思。对一些异常、中断进行了定义。中断在这一块进行了设置。register_handler定义在这个头文件中。为了定义一个中断服务程序ISR,该头文件必须包含进来。在后面的介绍会发现,要实现中断,必须设置中断向量,而中断向量的设置就是使用register_handler()来完成的,所以定义中断服务程序,必须包含该头文件。
5. cdefBF533.h
这个仅仅包含了cdefBF532.h,说明BF532和BF533是兼容的。cdefBF532.h头文件包含的全部是一些寄存器指针的定义。像程序中用到的pSIC_IMASK、pSIC_IAR0 、pTIMER0_PERIOD等全都是在该头文件中定义的。
6. sys/05000311.h
其实就是05000311.h,理由同4。为安全使用GPIO MMR定义了一些宏。Init_Flags中调用的那些函数都是在该头文件定义的宏,而这些宏最终又使用builin.h中的内嵌函数来实现。
头文件现在的理解差不多就是这些,以后有什么发现还会添进来。因为程序里面真正定义的变量和函数其实没多少,把它们理清了,心里有底多了,以后自己也要用。
刚开始学,只能一个一个啃了。欢迎大家提出宝贵意见
http://blog.163.com/sunny_110119/blog/static/37068271201022995336909/
程序框架
void main(void)
{
//Initialize System Configuration Register
sysreg_write(reg_SYSCFG, 0x32);
Init_Flags();
Init_Timers();
Init_EBIU();
Init_Flash();
Init_Interrupts();
while(1);
}
这个程序首先对系统的各种寄存器进行配置,以使系统完成我们所需要的功能。完成配置之后,程序在运行的过程中,当发生时钟中断时,LED根据亮灯方向向左或向右移亮灯;当发生PF A中断,对应该程序,即SW4被按下时,更改LED的移动方向。
sysreg_write(reg_SYSCFG, 0x32);----------》允许周期计数
在对各个外设进行初始化之前,程序首先设置了系统设置寄存器System Configuration Register (SYSCFG):高16位默认为0,低16位第4位、第5位默认为1,只有两位需要我们设置,第0位和第1位。
第1位:是否允许周期计数CCEN(Cycle-Counter Enable)
1:允许
0:禁止
第0位:没有很看懂这段话的意思,以后用到再说吧。
那么总结起来,这句话对系统配置寄存器只对一个地方进行了设置,那就是允许周期计数。
因为对系统设置寄存器的初始化比较简单,所以就先在这里介绍了。
BF533 LED学习(3): Init_Flags()
首先贴一下该段代码: