ARM9控制LED流水灯程序设计 - 图文 联系客服

发布时间 : 星期六 文章ARM9控制LED流水灯程序设计 - 图文更新完毕开始阅读5a1c5a7f31b765ce05081416

华东交通大学理工学院课程设计报告

// Version : 0.1

//=================================================================== #include \#include \#include \#include \#include \ #include #include #include #include #include

extern char Image$$RW$$Limit[]; void *mallocPt=Image$$RW$$Limit;

static int delayLoopCount; void Delay(int time) //延时函数 {

int i, adjust=0;

if(time==0) {

time = 200; adjust = 1;

delayLoopCount = 800;

rWTCON = ((PCLK/1000000-1)<<8)|(2<<3); rWTDAT = 0xffff;

rWTCON = ((PCLK/1000000-1)<<8)|(2<<3)|(1<<5); //Watch-dog timer

start

- 12 -

华东交通大学理工学院课程设计报告

}

for(;time>0;time--)

for(i=0;i

if(adjust==1) {

rWTCON = ((PCLK/1000000-1)<<8)|(2<<3); //Watch-dog timer stop i = 0xffff - rWTCNT; //1count->64us, 200*800 cycle runtime = 64*i us delayLoopCount = 16000000/(i*64);

//200*800:64*i=1*x:100 -> x=160000*100/(64*i)

}

}

void Port_Init(void)//I/O口初始化 {

rGPACON = 0x7fffff; rGPBCON = 0x155555;

rGPBUP = 0x7ff; // The pull up function is disabled GPB[10:0] rGPCCON = 0xaaaaaaaa;

rGPCUP = 0xffff; // The pull up function is disabled GPC[15:0] rGPDCON = 0xaaaaaaaa;

rGPDUP = 0xffff; // The pull up function is disabled GPD[15:0] rGPECON = 0xaaaaaaaa;

rGPEUP = 0xffff; // The pull up function is disabled GPE[15:0] rGPFCON = 0x55aa;

rGPFUP = 0xff; // The pull up function is disabled GPF[7:0] rGPGCON = 0xff95ffba;

rGPGUP = 0xffff; // The pull up function is disabled GPG[15:0] rGPHCON = 0x2afaaa;

rGPHUP = 0x7ff; // The pull up function is disabled GPH[10:0] rGPJDAT = (1<<12)|(0<<11);

- 13 -

华东交通大学理工学院课程设计报告

rGPJCON = 0x016aaaa; rGPJUP

= ~((0<<12)|(1<<11));

rGPJDAT = (0<<12)|(0<<11); rGPJCON = 0x016aaaa; rGPJUP

= 0x1fff;//~((1<<12)|(1<<11));

rEXTINT0 = 0x22222222; // EINT[7:0] rEXTINT1 = 0x22222222; // EINT[15:8] rEXTINT2 = 0x22222222; // EINT[23:16] }

static int whichUart=1;

void Uart_Init(int pclk,int baud)//串口初始化,设置时钟,波特率 {

if(pclk == 0) pclk = PCLK;

rUFCON0 = 0x0; //UART channel 0 FIFO control register, FIFO disable rUFCON1 = 0x0; //UART channel 1 FIFO control register, FIFO disable rUFCON2 = 0x0; //UART channel 2 FIFO control register, FIFO disable rUMCON0 = 0x0; //UART chaneel 0 MODEM control register, AFC disable rUMCON1 = 0x0; //UART chaneel 1 MODEM control register, AFC disable //UART0

rULCON0 = 0x3; //Line control register : Normal,No parity,1 stop,8 bit rUCON0 = 0x245; // Control register rUBRDIV0 = 0x34; //UART1

rULCON1 = 0x3; rUCON1 = 0x245;

rUBRDIV1=( (int)(pclk/16./baud+0.5) -1 ); //UART2

rULCON2 = 0x3; rUCON2 = 0x245;

- 14 -

华东交通大学理工学院课程设计报告

rUBRDIV2=( (int)(pclk/16./baud+0.5) -1 ); }

void Uart_Select(int ch) {

whichUart = ch; }

void Uart_TxEmpty(int ch) {

if(ch==0)

while(!(rUTRSTAT0 & 0x4)); //Wait until tx shifter is empty. else if(ch==1)

while(!(rUTRSTAT1 & 0x4)); //Wait until tx shifter is empty. else if(ch==2)

while(!(rUTRSTAT2 & 0x4)); //Wait until tx shifter is empty. }

void Uart_SendString(char *pt) {

while(*pt)

Uart_SendByte(*pt++); }

void Led_Display(int data) //LED显示 {

rGPFDAT = (rGPFDAT & ~(0xf<<4)) | ((~data & 0xf)<<4); }

void Timer_Start(int divider) //0:16us,1:32us 2:64us 3:128us {

- 15 -

Uart_TxEmpty(whichUart);