📄 main.c
字号:
//***************************************************************************************************
//WorkGroup: Institute of Automation,Chinese Academy of Sciences
//File Name: main.c
//Description: Timer Interrupt Testting.
//Author: JuGuang,Lee
//Last Date&Time: 2003-10-20 10:59
//***************************************************************************************************
#include "s3c4510b_add.h"
#include "c554.h"
void c554(void);
unsigned Install_Handle(unsigned routine,unsigned *vector);
//__irq Key word, TP004--Page 312
void __irq IRQHandler(void);
void Main(void)
{
BYTE i;
unsigned *irqvec=(unsigned*)0x18;
*((volatile unsigned long *) 0x3ff5000) = 0x000000;
Install_Handle((unsigned)IRQHandler,irqvec);
*((volatile unsigned long *) 0x3ff3008) = 0x000c49;
*((volatile unsigned long *) 0x3ff5004) = 0x000318; //int0
INTMSK=0x1ffffc; //open int0
delay(10);
*((volatile unsigned char *) (0x2200002+0x30)) = 0xaf;
delay(10);
*((volatile unsigned char *) (0x2200002+0x30)) = 0xa9|0x00;
*((volatile unsigned char *) (0x2200004+0x30)) = 0x08;
*((volatile unsigned char *) (0x2200003+0x30)) = 0x83;
*((volatile unsigned char *) (0x2200000+0x30)) = BAUDBASE;
*((volatile unsigned char *) (0x2200001+0x30)) = 0;
*((volatile unsigned char *) (0x2200003+0x30)) = 0x03;
*((volatile unsigned char *) (0x2200001+0x30)) = 0x01;
delay(10);
*((volatile unsigned char *) (0x2200002+0x28)) = 0xaf;
delay(10);
*((volatile unsigned char *) (0x2200002+0x28)) = 0xa9|0x00;
*((volatile unsigned char *) (0x2200004+0x28)) = 0x08;
*((volatile unsigned char *) (0x2200003+0x28)) = 0x83;
*((volatile unsigned char *) (0x2200000+0x28)) = BAUDBASE;
*((volatile unsigned char *) (0x2200001+0x28)) = 0;
*((volatile unsigned char *) (0x2200003+0x28)) = 0x03;
*((volatile unsigned char *) (0x2200001+0x28)) = 0x01;
delay(10);
IIR = *((volatile unsigned char *) (0x2200008));
// Init_St554(0x06);
// Init_St554(0x05);
while(1);
}
void __irq IRQHandler(void)
{
unsigned char chan[8];
BYTE k;
BYTE i,adder;
adder = INTPND;
for(k=0;k<8;k++)
{
chan[k] = RXdata(k);
chan[k] = chan[k] & 0x04;
}
i = ((*((volatile unsigned char *) (0x2200002+0x28))) & 0x04);
if(adder == 0x02)
{
INTPND=INTPND|0x0002;
if(chan[5] == 0x04)
{
// *((volatile unsigned char *) 0x2200028) = chan[5];
// *((volatile unsigned char *) 0x2200028) = chan[6];
I = *((volatile unsigned char *) 0x2200028);
*((volatile unsigned char *) 0x2200028) = I;
// *((volatile unsigned char *) 0x2200028) = adder ;
}
if(chan[6] == 0x04)
{
// *((volatile unsigned char *) 0x2200030) = chan[5];
// *((volatile unsigned char *) 0x2200030) = chan[6];
I = *((volatile unsigned char *) 0x2200030);
*((volatile unsigned char *) 0x2200030) = I;
// *((volatile unsigned char *) 0x2200030) = adder ;
}
}
if (adder == 0x01)
{
INTPND=INTPND|0x0001;
*((volatile unsigned char *) 0x22000030) = (*((volatile unsigned char *) (0x2200002+0x30)));
I = *((volatile unsigned char *) 0x2200030);
*((volatile unsigned char *) 0x2200030) = (*((volatile unsigned char *) (0x2200002+0x30)));
*((volatile unsigned char *) 0x2200030) = I;
}
/*
if(chan[1] == 0x01)
{
I = *((volatile unsigned char *) 0x2200008);
*((volatile unsigned char *) 0x2200008) = I;
}
if(chan[2] == 0x01)
{
I = *((volatile unsigned char *) 0x2200010);
*((volatile unsigned char *) 0x2200010) = I;
}
if(chan[3] == 0x01)
{
I = *((volatile unsigned char *) 0x2200018);
*((volatile unsigned char *) 0x2200018) = I;
}
*/
}
unsigned Install_Handle(unsigned routine,unsigned *vector)
{
unsigned vec,oldvect;
vec=((routine-(unsigned)vector-0x8)>>2);
vec=0xea000000|vec;
oldvect=*vector;
*vector=vec;
return(oldvect);
}
void Init_St554(BYTE channel)
{
*((volatile unsigned char *) (0x2200002+(channel<<3))) = 0xaf;
delay(10);
*((volatile unsigned char *) (0x2200002+(channel<<3))) = 0xa9|0x00;
*((volatile unsigned char *) (0x2200004+(channel<<3))) = 0x08;
*((volatile unsigned char *) (0x2200003+(channel<<3))) = 0x83;
*((volatile unsigned char *) (0x2200000+(channel<<3))) = BAUDBASE;
*((volatile unsigned char *) (0x2200001+(channel<<3))) = 0;
*((volatile unsigned char *) (0x2200003+(channel<<3))) = 0x03;
*((volatile unsigned char *) (0x2200001+(channel<<3))) = 0x01;
delay(10);
IIR = *((volatile unsigned char *) (0x2200000+(channel<<3)));
}
BYTE RXdata(BYTE p_channel)
{
return (*((volatile unsigned char *) ((0x2200002+(p_channel<<3)))));
}
void delay(WORD num)
{
while(num--);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -