BF533 LED学习(1):头文件

原文地址::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中的内嵌函数来实现。


头文件现在的理解差不多就是这些,以后有什么发现还会添进来。因为程序里面真正定义的变量和函数其实没多少,把它们理清了,心里有底多了,以后自己也要用。


刚开始学,只能一个一个啃了。欢迎大家提出宝贵意见BF533 LED学习(1):头文件 - sunny_110119 - sunny_110119的博客

 

 

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()  

 

首先贴一下该段代码:

void Init_Flags(void)
{
FIO_ANOM_0311_INEN_W(0x0100);
FIO_ANOM_0311_DIR_W(0x0000);
FIO_ANOM_0311_EDGE_W(0x0100);
FIO_ANOM_0311_MASKA_W(0x0100,pFIO_MASKA_D);
}

BF533一共有16个双向可编程标志引脚。这些引脚都是复用的,根据不同的要求可以被并行外设接口、TIMER、串行外设接口(SPI)使用。为了灵活控制这些接口,BF533一共提供了17个内存映射寄存器来(MMR)对其进行控制。分类下来看着也挺清楚的。
四个用来设置引脚状态位的:FIO_FLAG_D、FIO_FLAG_S、FIO_FLAG_C、FIO_FLAG_T。
BF533为每个PF引脚提供了两个独立的中断通道:中断A和中断B。这两类中断在功能上是完全一样的。同样地为了控制这两类中断,于是有了下面8个寄存器。
中断A相关:FIO_MASKA_D、FIO_MASKA_S、FIO_MASKA_C、FIO_MASKA_T;
中断B相关:FIO_MASKB_D、FIO_MASKB_S、FIO_MASKB_C、FIO_MASKB_T;
剩下的几个寄存器是和输入方向相关的。
FIO_DIR:用来设置该引脚为输入还是输出,0为输入,1为输出,默认情况下均为0,也即输入。
如果引脚被设置为输入的话,那么还要继续对下面的寄存器进行设置,一个是输入缓冲使能;再一个就是决定输入对什么敏感,我的一个理解是什么情况下会触发一个中断,是电平触发还是跳变沿触发。
输入缓冲使能: FIO_INEN。最开始看这个寄存器的时候以为就是使能相应的PF引脚,然后看FIO_MASKA_D等寄存器也具有使能PF引脚的功能,当时就想这些功能不是重复了吗?后来认真的看了下BF533的硬件参考手册,发现是用来设置 输入缓冲使能的。也就是说你如果设置为输入,你得使能数据的缓冲功能。
当你设置完输入缓冲使能了之后,则需要对输入的敏感情况进行设置,不知道怎么翻译,自己能看懂就好了,呵呵,大致那个意思。一共涉及到3个寄存器:
FIO_POLAR:用来设置当前PF引脚的极性
FIO_EDGE:用来设置是电平敏感还是边沿敏感
FIO_BOTH:用来设置时单跳变敏感,还是双向跳变都敏感。该寄存器只有在FIO_DIR设置为输入且FIO_EDGE设置为边沿敏感时才有效。
以上四个寄存器都只在FIO_DIR设置为输入时才有效,否则对它们的写都是无效的。

讲完了这些,我们来看一下FLAG的中断流程,其实硬件手册里是有的:
BF533 LED学习(3):  Init_Flags() - sunny_110119 - sunny_110119的博客
有两套中断A和B,功能一样,流程也必然一样了。
从上图可以发现,我们要做的工作首先是使能该引脚的中断,那么这一步会用到中断A或者中断B的四个寄存器,其实四个寄存器我都有试过,D、S、T都能实现,只要设定相应的值;C的话不行,现在想想也对,它只是起到一个清除的作用,如果都没使能,你清不清除都懒得理你。
接下来是设置输入方向:
         如果为输入的话,要使能输入缓冲,且还要继续设置引脚极性、对什么敏感等;
         如果为输出的话,那就看有没有写引脚状态,写引脚的话就发生中断。

FIO_ANOM_0311_INEN_W(0x0100);//使能PF8输入缓冲
FIO_ANOM_0311_DIR_W(0x0000);//PF8设置为输入
FIO_ANOM_0311_EDGE_W(0x0100);//PF8边沿敏感
FIO_ANOM_0311_MASKA_W(0x0100,pFIO_MASKA_D);//使能PF8的A中断

这些语句的顺序似乎没有什么特别的规定。事实上我有把最后一句放到最前面去,程序也能跑,不过想想所有设置完之后再开始使能,似乎更合情合理。
要注意的一个地方是,如果设置为输入,那么输入缓冲使能也必须置位。

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值