赞
踩
由图可知当LED0为低电平时,发光二极管即可点亮。LED0对应的是GPIO3,而GPIO3即为GPIO1_IO03。所以,在GPIO1_IO03输出0就点亮,输出1就熄灭。
需要对GPIO1_IO03进行如下配置:
GPIO1 的时钟由 CCM_CCGR1 的 bit27 和 bit26 这两个位控制,将这两个位都设置位 11 即
具体的开关方法在CCM_CCGR0中有介绍,如下:
大概代表了每一位都有这四种设置模式:
找到GPIO1_IO03的复用配置寄存器“IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03”的地址为
3.配置GPIO1_IO03
HYS(bit16):对应图 8.1.4.2 中 HYS,用来使能迟滞比较器,当 IO 作为输入功能的时候有
效,用于设置输入接收器的施密特触发器是否使能。如果需要对输入波形进行整形的话可以使
能此位。此位为 0 的时候禁止迟滞比较器,为 1 的时候使能迟滞比较器。
PUS(bit15:14):对应图 8.1.4.2 中的 PUS,用来设置上下拉电阻的,一共有四种选项可以选
择,如表 所示:
PUE(bit13):图 8.1.4.2 没有给出来,当 IO 作为输入的时候,这个位用来设置 IO 使用上下
拉还是状态保持器。当为 0 的时候使用状态保持器,当为 1 的时候使用上下拉。状态保持器在
IO 作为输入的时候才有用,顾名思义,就是当外部电路断电以后此 IO 口可以保持住以前的状
态。
PKE(bit12):对应图 8.1.4.2 中的 PKE,此为用来使能或者禁止上下拉/状态保持器功能,为
0 时禁止上下拉/状态保持器,为 1 时使能上下拉和状态保持器。
ODE(bit11):对应图 8.1.4.2 中的 ODE,当 IO 作为输出的时候,此位用来禁止或者使能开
路输出,此位为 0 的时候禁止开路输出,当此位为 1 的时候就使能开路输出功能。SPEED(bit7:6):对应图中的 SPEED,当 IO 用作输出的时候,此位用来设置 IO 速
度,设置如表 所示
DSE(bit5:3):对应图 8.1.4.2 中的 DSE,当 IO 用作输出的时候用来设置 IO 的驱动能力, 总共有 8 个可选选项,如表 8.1.4.3 所示:
SRE(bit0):对应图 8.1.4.2 中的 SRE,设置压摆率,当此位为 0 的时候是低压摆率,当为 1 的时候是高压摆率。这里的压摆率就是 IO 电平跳变所需要的时间,比如从 0 到 1 需要多少时 间,时间越小波形就越陡,说明压摆率越高;反之,时间越多波形就越缓,压摆率就越低。如 果你的产品要过 EMC 的话那就可以使用小的压摆率,因为波形缓和,如果你当前所使用的 IO 做高速通信的话就可以使用高压摆率。
创建工程文件:
C 语言部分有两个文件 main.c 和 main.h,main.h 里面主要是定义的寄存器地址,在 main.h
里面输入代码:
- #ifndef __MAIN_H
- #define __MAIN_H
-
- #define CCM_CCGR0 *((volatile unsigned int *)0x020c4068)
- #define CCM_CCGR1 *((volatile unsigned int *)0x020c406c)
- #define CCM_CCGR2 *((volatile unsigned int *)0x020c4070)
- #define CCM_CCGR3 *((volatile unsigned int *)0x020c4074)
- #define CCM_CCGR4 *((volatile unsigned int *)0x020c4078)
- #define CCM_CCGR5 *((volatile unsigned int *)0x020c407c)
- #define CCM_CCGR6 *((volatile unsigned int *)0x020c4080)
-
- /*
- *IOMUX相关寄存器
- */
- #define SW_MUX_GPIO1_IO03 *((volatile unsigned int *)0x020e0068)
- #define SW_PAD_GPIO1_IO03 *((volatile unsigned int *)0x020e02f4)
-
- /*
- *GPIO1相关寄存器地址
- */
- #define GPIO1_DR *((volatile unsigned int *)0x0209c000)
- #define GPIO1_GDIR *((volatile unsigned int *)0x0209c004)
- #define GPIO1_PSR *((volatile unsigned int *)0x0209c008)
- #define GPIO1_IRC1 *((volatile unsigned int *)0x0209c00c)
- #define GPIO1_IRC2 *((volatile unsigned int *)0x0209c010)
- #define GPIO1_IMR *((volatile unsigned int *)0x0209c014)
- #define GPIO1_ISR *((volatile unsigned int *)0x0209c018)
- #define GPIO1_EDGE_SELECT *((volatile unsigned int *)0x0209c01c)
-
-
- #endif
- #include "main.h"
-
- /*使能外设时钟*/
- void clk_enable(void){
- CCM_CCGR1 = 0xffffffff;
- CCM_CCGR2 = 0xffffffff;
- CCM_CCGR3 = 0xffffffff;
- CCM_CCGR4 = 0xffffffff;
- CCM_CCGR5 = 0xffffffff;
- CCM_CCGR6 = 0xffffffff;
-
- }
-
- /*初始化LED*/
- void led_init(void){
- SW_MUX_GPIO1_IO03 = 0x5; /*复用为GPIO1_IO03 */
- SW_PAD_GPIO1_IO03 = 0x10b0; /*设置GPIO1_IO03电器属性*/
-
- /*GPIO初始化*/
- GPIO1_GDIR = 0x8; /*设置为输出*/
- GPIO1_DR = 0x0; /*打开LED灯*/
-
- }
- /*短延时*/
- void delay_short(volatile unsigned int n){
-
- while(n--) {}
-
- }
-
- /*延时,一次循环大概是1ms,主频396MHz
- * n : 延时ms数
- */
- void delay(volatile unsigned int n){
-
- while (n--)
- {
- delay_short(0x7ff);
- }
-
-
- }
-
- /*打开LED灯*/
- void led_on(){
-
- GPIO1_DR &= ~(1<<3); /*bit3清零*/
-
- }
- /*关闭LED灯*/
- void led_off(){
-
- GPIO1_DR |= (1<<3); /*bit3值置1*/
-
- }
-
- int main(void) {
- clk_enable(); /*使能外设时钟*/
- led_init(); /*初始化LED*/
- /*初始化LED */
-
- /*设置LED*/
-
- while(1){
- led_on();
- delay(500);
-
- led_off();
- delay(500);
- };
- return 0;
-
- }
- objs = start.o main.o
-
- ledc.bin : $(objs)
- arm-linux-gnueabihf-ld -Timx6u.lds $^ -o ledc.elf
- arm-linux-gnueabihf-objcopy -O binary -S ledc.elf $@
- arm-linux-gnueabihf-objdump -D -m arm ledc.elf > ledc.dis
-
- %.o : %.c
- arm-linux-gnueabihf-gcc -Wall -nostdlib -c -O2 -o $@ $<
-
- %.o : %.S
- arm-linux-gnueabihf-gcc -Wall -nostdlib -c -O2 -o $@ $<
-
- clean :
- rm -rf *.o ledc.bin ledc.elf ledc.dis
设置C语言运行环境,新建文件start.S:
-
- .global _start
-
- _start:
- /* 设置处理器进入SVC模式*/
- mrs r0, cpsr /*读取cpsr到r0 */
- bic r0, r0, #0x1f /*清除cpsr的bit4-0 */
- orr r0, r0, #0x13 /*使用svc模式*/
- msr cpsr, r0 /*将r0写入cpsr */
-
- /*设置SP指针 */
- ldr sp, =0x80200000
- b main /*跳转到C语言的main函数*/
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。