开发板学习笔记

基础的操作寄存器,是直接访问该寄存器,但如果寄存器太多,也会显得太过繁琐,也会比较乱。

模仿stm32驱动开发,利用结构体来承载所有的寄存器抽象化为外设。

将上一章的跑马灯实验修改一下。

修改驱动

1、清除bss段

bss段是链接脚本中定义但没有被初始化的变量,对于这些变量,最好是清零。

_start:                   /*设置处理器进入SVC模式*/
mrs ro, cpsr          /*读取cpsr到ro*/
bic r®, r0,#x1f    /*清除cpsr的bit4-0*/
orr r®, r,#@x13   /*使用SVC模式*/
msr cpsr, ro          /*将ro写入到cpsr*/
/*清除BSS段*1
ldr ro,_bss_start
ldr rl,_bss_end
mov r2,#0
bss_loop:
stmia ro!,{r2}
cmp ro, r1            /*比较RO和R1里面的值*/
ble bss_loop        /*如果ro地址小于等于r1,继续清除                              bss段*/
2、定义外设的基地址,构建结构体。

#define CCM BASE

(0X020C4000)

#define CCM_ANALOG_BASE

(0X020C8000)

#define IOMUX_SW_MUX_BASE

(0X620E0014)

#define IOMUX_SW_PAD_BASE

(0X620E0204)

#define GPIO1_BASE 

(0Xe209c000)

#define GPIO2_BASE

(0X020A0000)

#define GPIO3 BASE

(0x020A4000)

#define GPIO4_BASE

(0x020A8000)

#define GPIO5_BASE 

(0Xe20AC000)

3、编写链接脚本。

SECTIONS {

0X87800000;

.text :

start.o

*(.text){

.rodata ALIGN(4):{*(.rodata)}

.data ALIGN(4):{*(.data)}

[ibss_sart=.;

.bss ALIGN(4):{*(.bss)*(COMMON)}

lbss_end=.;

}

运行结果:

155957a9f0b447a6b3ec04063d83295a.jpg

 

 

对于一些比较大的工程,文件可能会比较多,所以会bsp工程管理很重要。

BSP工程管理原理

bsp工程管理的目的是为了模块化管理代码,同一属性的文件放在同一个文件夹里。

1、新建所需的文件夹,将同一属性的文件放到相应的文件夹中。
2、修改 clk、led、delay 驱动,创建对应的驱动文件,然后放置到对应的目录中。
3、根据编写的新驱动文件,修改 main.c 文件内容。
设置 VSCODE 头文件路径。先创建:yscode.目录,然后打开 c/c++配置器,会在yscode
目录下生成一个叫做 c.cpp_properties,json 的文件。

"configurations":[

{
"name":"Linux",
"includePath":[
"${workspaceFolder}/**”
"${workspaceFolder}/bsp/clk",
"${workspaceFolder}/bsp/delay"
"${workspaceFolder}/bsp/led",
"${workspaceFolder}/imxqu",
"${workspaceFolder}/project"

]
"defines":[],
"compilerPath":"/usr/bin/gcc",
"cStandard":"c11",
"cppStandard":"c++17",
"intellisenseMode":"clang-x64”

}

]
"version": 4
 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值