我是靠谱客的博主 落寞太阳,这篇文章主要介绍第4章 官方SDK移植一、编写cc.h文件:二、编写start.S文件:三、移植SDK文件:四、编写main.c主函数文件:五、编写imx6u.lds链接脚本文件:六、编写Makefile文件:七、编译运行:,现在分享给大家,希望可以做个参考。

一、编写cc.h文件:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#ifndef __CC_H #define __CC_H #define __I volatile #define __O volatile #define __IO volatile #define NO 1 #define OFF 0 typedef signed char int8_t; typedef signed short int int16_t; typedef signed int int32_t; typedef unsigned char uint8_t; typedef unsigned short int uint16_t; typedef unsigned int uint32_t; typedef unsigned long long uint64_t; typedef signed char s8; typedef signed short int s16; typedef signed int s32; typedef signed long long int s64; typedef unsigned char u8; typedef unsigned short int u16; typedef unsigned int u32; typedef unsigned long long int u64; #endif

二、编写start.S文件:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
.global _start .global _bss_start _bss_start: .word __bss_start .global _bss_end _bss_end: .word __bss_end _start: /* 设置处理器进入SVC模式 */ MRS R0, CPSR @读取CPSR到R0 BIC R0, R0, #0x1F @清除CPSR中的Bit4-0 ORR R0, R0, #0x13 @使用SVC模式 MSR CPSR, R0 @将R0写入到CPSR /* 清除BSS段 */ LDR R0, _bss_start LDR R1, _bss_end MOV R2, #0 bss_loop: STMIA R0!, {R2} CMP R0, R1 @比较R0与R1中的值 ble bss_loop @如果R0地址小于R1地址,则继续清除BSS段 /* 设置SP指针 */ LDR SP, = 0x80200000 @设置SP指针起始地址 B main @跳转到C语言main函数

三、移植SDK文件:

1、fsl_common.h文件

2、fsl_iomuxc.h文件

3、MCIMX6Y2.h文件


四、编写main.c主函数文件:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include "MCIMX6Y2.h" #include "fsl_common.h" #include "fsl_iomuxc.h" #include "cc.h" /* 使能外设时钟 */ 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; } /* 初始化LED */ void LED_Init(void) { IOMUXC_SetPinMux(IOMUXC_GPIO1_IO03_GPIO1_IO03, 0x0); /* 复用GPIO1_IO03为GPIO */ IOMUXC_SetPinConfig(IOMUXC_GPIO1_IO03_GPIO1_IO03, 0x10B0); /* 设置GPIO1_IO03电气属性 */ /* 初始化GPIO */ GPIO1->GDIR = 0x8; /* 设置GPIO1_IO03为输出 */ GPIO1->DR = ~(1<<3); /* 设置GPIO1_IO03输出低电平,打开LED灯 */ } /* 短延时 */ void delay_short(volatile unsigned int n) { while(n--) {} } /* 延时,在主频为396MHz时,一次循环大概1ms */ void delay_ms(volatile unsigned int time_ms) { while(time_ms--) { delay_short(0x7FF); } } /* 打开LED灯 */ void LED_ON(void) { GPIO1->DR &= ~(1<<3); /* Bit3清零 */ } /* 关闭LED灯 */ void LED_OFF(void) { GPIO1->DR |= (1<<3); /* Bit3置位 */ } int main(void) { Clk_Enable(); /* 使能外设时钟 */ LED_Init(); /* 初始化LED */ /* LED闪烁 */ while(1) { LED_ON(); delay_ms(2000); LED_OFF(); delay_ms(2000); } return 0; }

五、编写imx6u.lds链接脚本文件:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SECTIONS { . = 0x87800000; .text : { start.o *(.text) } .rodata ALIGN(4) : {*(.rodata*)} .data ALIGN(4) : {*(.data)} __bss_start = .; .bss ALIGN(4) : {*(.bss) *(COMMON)} __bss_end = .; }

六、编写Makefile文件:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
NAME ?= ledc OBJS := start.o main.o CROSS_COMPILE ?= arm-linux-gnueabihf- LD := $(CROSS_COMPILE)ld OBJCOPY := $(CROSS_COMPILE)objcopy OBJDUMP := $(CROSS_COMPILE)objdump GCC := $(CROSS_COMPILE)gcc $(NAME).bin : $(OBJS) $(LD) -Timx6u.lds -o $(NAME).elf $^ $(OBJCOPY) -O binary -S $(NAME).elf $@ $(OBJDUMP) -D -m arm $(NAME).elf > $(NAME).dis %.o : %.s $(GCC) -Wall -nostdlib -c -O2 -o $@ $< %.o : %.S $(GCC) -Wall -nostdlib -c -O2 -o $@ $< %.o : %.c $(GCC) -Wall -nostdlib -c -O2 -o $@ $< clean : rm -rf *.o $(NAME).bin $(NAME).elf $(NAME).dis

七、编译运行:

1、编译程序

2、烧写程序


最后

以上就是落寞太阳最近收集整理的关于第4章 官方SDK移植一、编写cc.h文件:二、编写start.S文件:三、移植SDK文件:四、编写main.c主函数文件:五、编写imx6u.lds链接脚本文件:六、编写Makefile文件:七、编译运行:的全部内容,更多相关第4章内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(197)

评论列表共有 0 条评论

立即
投稿
返回
顶部