S3C2240试验一---------I/O续(原创)

来源:互联网 发布:二叉树算法 编辑:程序博客网 时间:2024/05/17 02:28

上午刚弄完一篇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

 

原创粉丝点击