资讯详情

基于MX6U—ALPHA开发板下C语言LED点灯

硬件原理

从图中可以看出,LED0 接到了 GPIO_3 上,GPIO_3 就是 GPIO1_IO03,当 GPIO1_IO03 输出低电平(0)发光二极管时 LED0 点亮,当 PIO1_IO03 输出高电平(1)的时候发 光二极管 LED0 不会导通,所以 LED0 所以 LED0 亮灭取决于 GPIO1_IO03 输出电平,输出 0 就亮,输出 1 就灭。

创建在虚拟机下strat.c main.h main.c makefile

1.汇编文件

.global _start    /* 全局标号 */ /* 文件名:start.s 创建人:JonathanQian 创建时间:2022.6.8  /*  /*  * 描述: _start该函数的主要功能是设置函数C  *   运行环境。  */ _start:   /* 进入SVC模式 */  mrs r0, cpsr  bic r0, r0, #0x1f  /* 将r0寄存器中的低5位清零,即cpsr的M0~M4  */  orr r0, r0, #0x13  /* r0或上0x13,表示使用SVC模式     */  msr cpsr, r0  /* 将r0 数据写入cpsr_c中      */   ldr sp, =0X80200000 /* 设置栈指针    */  b main    /* 跳转到main函数    */  

2.C语言文件

/* 文件名:main.c 创建人:JonathanQian 创建时间:2022.6.8  /* #include "main.h"  /*  * @description : 使能I.MX6U所有外设时钟  * @param   : 无  * @return   : 无  */ void clk_enable(void) {  CCM_CCGR0 = 0xffffffff;  CCM_CCGR1 = 0xffffffff;  CCM_CCGR2 = 0xffffffff;  CCM_CCGR3 = 0xffffffff;  CCM_CCGR4 = 0xffffffff;  CCM_CCGR5 = 0xffffffff;  CCM_CCGR6 = 0xffffffff; }  /*  * @description : 初始化LED对应的GPIO  * @param   : 无  * @return   : 无  */ void led_init(void) {  /* 1、初始化IO复用 */  SW_MUX_GPIO1_IO03 = 0x5; /* 复用为GPIO1_IO03 */   /* 2、、配置GPIO1_IO03的IO属性    *bit 16:0 HYS关闭   *bit [15:14]: 00 默认下拉      *bit [13]: 0 kepper功能      *bit [12]: 1 pull/keeper使能      *bit [11]: 0 关闭开路输出      *bit [7:6]: 10 速度100Mhz      *bit [5:3]: 110 R0/6驱动能力      *bit [0]: 0 低转换率      */  SW_PAD_GPIO1_IO03 = 0X10B0;     /* 3、初始化GPIO */  GPIO1_GDIR = 0X0000008; /* GPIO1_IO03设置为输出 */   /* 4、设置GPIO1_IO03输出低电平,打开LED0 */  GPIO1_DR = 0X0; }  /*  * @description : 打开LED灯  * @param   : 无  * @return   : 无  */ void led_on(void) {  /*    * 将GPIO1_DR的bit3清零     */  GPIO1_DR &= ~(1<<3);  }  /*  * @description : 关闭LED灯  * @param   : 无  * @return   : 无  */ void led_off(void) {  /*       * 将GPIO1_DR的bit3置1   */  GPIO1_DR |= (1<<3); }  /*  * @description : 短时间延迟函数  * @param - n : 延迟循环次数(空操作循环次数,模式延时)  * @return   : 无  */ void delay_short(volatile unsigned int n) {  while(n--){} }  /*  * @description : 延时函数,在396Mhz的主频下  *         延迟时间约为1ms  * @param - n : 要延时的ms数  * @return   : 无  */ void delay(volatile unsigned int n) {  while(n--)  {   delay_short(0x7ff);  } }  /*  * @description : mian函数  * @param      : 无  * @return   : 无  */ int main(void) {  clk_enable();  /* 所有时钟    */  led_init();   /* 初始化led    */   while(1)   /* 死循环     */  {    led_off();  /* 关闭LED      */   delay(500);  /* 延时大约500ms   */    led_on();  /* 打开LED    */   delay(500);  /* 延时大约500ms   */  }   return 0; } 

3.H头文件

main.h

#ifndef __MAIN_H #define __MAIN_H  /* 文件名:main.h 创建人:JonathanQian 创建时间:2022.6.8  /*  #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_ICR1 			*((volatile unsigned int *)0X0209C00C)
#define GPIO1_ICR2 			*((volatile unsigned int *)0X0209C010)
#define GPIO1_IMR 			*((volatile unsigned int *)0X0209C014)
#define GPIO1_ISR 			*((volatile unsigned int *)0X0209C018)
#define GPIO1_EDGE_SEL 		*((volatile unsigned int *)0X0209C01C)

#endif

4.创建Makefile文件

makefile

objs := start.o main.o

ledc.bin : $(objs)
	arm-linux-gnueabihf-ld -Ttext 0X87800000  $^ -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  -o $@ $<	

%.o:%.s
	arm-linux-gnueabihf-gcc -Wall -nostdlib -c  -o $@ $<

clean:
	rm -rf *.o ledc.bin ledc.elf ledc.dis

在终端中输入  

make

调用makefile,生成.bin文件。

5.挂载SD卡

开发板SD卡装入读卡器连接到虚拟机之前,先用

ls /dev/sd*

命令查看当前虚拟机外接设备,当读卡机插入电脑,连接到虚拟机后,再用同样的命令查看,会得到SD卡插入位置。

6.代码烧写

用imxdownload将文件烧写到SD卡中

将imxdownload文件复制到文件夹内,更改其权限。

chmod 777 imxdownload

烧写至SD卡

./imxdownload led.bin /dev/sdb

7.代码验证

设置开发板的拨码开关如下图,SD卡启动开发板方式,验证发光二极管效果

 将SD卡插回开发板,可以看到LED灯闪烁效果。

LED灯闪烁

标签: 二极管sp0402u4080连接器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台