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、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
应用背景为变电站电力巡检,基于YOLO v4算法模型对常见电力巡检目标进行检测,并充分利用Ascend310提供的DVPP等硬件支持能力来完成流媒体的传输、处理等任务,并对系统性能做出一定的优化。.zip深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值