上午刚弄完一篇paper,中午闲着没事把自己昨天写的代码优化了一下,这样看起来结构更加紧凑且易于扩展,拿出来分享一下!
Init.S------------------------启动代码(和前面的一样)
2440adr.h------------------主要是一些寄存器的地址信息
2440lib.h--------------------功能函数的声明,如Delay(int x),Init_Port().....
2440lib.c---------------------2440lib.h的实现函数
main.c-------------------------实现函数
Init.s 和前面的一样
2440adr.h
这里只是做简单的i/o口实验,所以只列举了I/o寄存器的地址
#ifndef _2440adr_
#define _2440adr_
#define GPBCON (*(volatile unsigned *)0x56000010)
#define GPBDAT (*(volatile unsigned *)0x56000014)
#define GPBUP (*(volatile unsigned *)0x56000018)
#endif
2440lib.h
#ifndef _2440lib_
#define _2440lib_
void Delay(int x); //延迟函数
void ChangeClockDivider(int x,int y);//分频
void ChangeMPllValue(int x,int y,int z); 、//mpll时钟
void Port_Init(); //I/O口初始化
void Isr_Init(); //中断初始化
#endif
2440lib.c
由于我们只是用的主时钟频率,所以在这我没有实现分频和mpll,在此只是对Port_Init()做了实现
#include "2440lib.h"
#include "2440adr.h"
void Delay(int x)
{
int i;
for(i=0;i<x;i++);
}
void ChangeClockDivider(int x,int y)
{
}
void ChangeMPllValue(int x,int y,int z)
{
}
void Port_Init()
{
GPBCON=0x55555;
GPBUP=0x1e0;
}
void Isr_Init()
{
}
#include "2440adr.h"
#include "2440lib.h"
void main()
{
ChangeClockDivider(3,1);
ChangeMPllValue(127,2,1);
Port_Init();
Isr_Init();
while(1)
{
GPBDAT=(GPBDAT&0xe1f)|0xfde;
Delay(0x5fff);
GPBDAT=(GPBDAT&0xe1f)|0xfbe;
Delay(0x5fff);
GPBDAT=(GPBDAT&0xe1f)|0xf7e;
Delay(0x5fff);
GPBDAT=(GPBDAT&0xe1f)|0xefe;
Delay(0x5ffff);
}
}
编译通过,把程序下载到开发板上,效果和前一节一样。
是不是这样写感觉思路更清晰且扩展性更强(我感觉是!)
总结:伪指令的用法
#ifndef
#define
#end