📄 main.c
字号:
#include "datatype.h"
#include "console.h"
#include "ctrl_set.h"
#include "D12Def.h"
#include "D12op.h"
#include "Chap_9.h"
#include "debug.h"
#include "rtl8019.h"
extern U32 MCLK;
void __irq Timer5_Exception(void);
void __irq EXT_Exception(void);
void __irq USB_Exception(void);
void __irq ETH_Exception(void);
void UsbIntProc(U16 i);
U8 eth_data[1500];
U32 eth_len;
struct send_data
{
U16 len;
U16 cnt;
U8 *pdata;
U16 *init_data;
U8 buff[2100];
};
struct send_data SEND_BUFF;
TIME_STRUC SysTime;
U16 SERIAL_BAUD = 57600;
char table_begin[] = "/***************************************************************/\n";
/*********************************************************************
*****LED灯控制,输入1:灯1亮;2:灯2亮;3:灯3亮;
*********************************************************************/
void LEDON(char i)
{
if(i==1)
{
rPDATC&=0xfff1;
rPDATC|=2;
}
if(i==2)
{
rPDATC&=0xfff1;
rPDATC|=4;
}
if(i==3)
{
rPDATC&=0xfff1;
rPDATC|=8;
}
}
/*********************************************************************
*****初始化定时器5
*********************************************************************/
void Time5IntTest(void)
{
unsigned long int prescaler,mux5,timer5control;
pISR_TIMER5 =(int)Timer5_Exception;
rINTCON=1;
rINTMOD&=~BIT_TIMER5;//set timer5 as irq interrupt mode
//rINTMSK=~(BIT_TIMER5|BIT_GLOBAL); //timer5 interrupt enable
prescaler=255;
prescaler<<=16;
rTCFG0&=0xfffff0ff;
rTCFG0|=prescaler; //seting timer5 prescaler
mux5=0 ;//0 1/2
mux5<<=20;
rTCFG1&=0xff0fffff;
rTCFG1|=mux5;
rTCNTB5=65535/4;
timer5control=2; //
timer5control<<=24;
rTCON=timer5control;
timer5control=5; //
timer5control<<=24;
rTCON=timer5control;
}
/*********************************************************************
*****外部中断初始化
*********************************************************************/
void Test_Eint(void)
{
rINTCON=1;//irq interrupt
pISR_EINT4567=(int)EXT_Exception;
pISR_EINT0 = (int) USB_Exception;
pISR_EINT1 = (int) ETH_Exception;
rSPUCR=4;
//rPCONG=0x0000;
rPCONG=0xffff; //EINT7~4
rPUPG=0x0; //pull up enable
rEXTINT=0x10; //low level interrupt
// rI_ISPC=BIT_EINT4567;
rINTMOD&=~(BIT_EINT4567|BIT_GLOBAL|BIT_EINT0|BIT_EINT1);
//rINTMSK=~(BIT_EINT4567|BIT_GLOBAL);
}
/*********************************************************************
*****外部中断处理程序
*********************************************************************/
U8 led_display = 1;
void __irq EXT_Exception(void)
{
static int i;
//DisableInt();
rEXTINTPND=0xf;
if(led_display == 1)
led_display = 0;
else
led_display = 1;
//EnableInt();
rI_ISPC=BIT_EINT4567;
}
void __irq USB_Exception(void)
{
int i;
puts("\nirq in the d12...");
i = D12_ReadInterruptRegister();
UsbIntProc(i);
rI_ISPC = BIT_EINT0;
}
void __irq ETH_Exception(void)
{
puts("\nirq in the 8019...");
rI_ISPC = BIT_EINT1;
}
/*********************************************************************
*****定时器5中断处理程序
*********************************************************************/
void __irq Timer5_Exception(void)
{
static int i = 0;
//DisableInt();
if(led_display)
{
if(i==0)
LEDON(1);
else if(i == 1)
LEDON(2);
else if(i == 2)
LEDON(3);
}
if(i++ == 2)
i = 0;
//EnableInt();
rI_ISPC=BIT_TIMER5;
}
////////////////////////////////////////////////////////////
void UsbIntProc(U16 i)
{
U8 tmp;
U16 xmit_left;
static U8 xmit_flag = 1;
//***************************************
//****ep0 out中断 处理*****************
//***************************************
if(i&D12_INT_ENDP0OUT) {
ep0_rxdone();
}
//***************************************
//****ep0 in中断 处理******************
//***************************************
if(i&D12_INT_ENDP0IN) {
ep0_txdone();
}
//***************************************
//****ep1 out中断 处理******************
//***************************************
if(i&D12_INT_ENDP1OUT) {
printf("\n,in EP2 and EP2's function now reserved...");
D12_ReadLastTransactionStatus(2);
D12_ClearBuff(2);
}
//***************************************
//****ep1 in中断 处理******************
//***************************************
if(i&D12_INT_ENDP1IN) {
printf("\n in EP3 and EP3's function now reserved...");
tmp = D12_ReadLastTransactionStatus(3);
}
//***************************************
//****ep2 out中断 处理******************
//***************************************
if(i&D12_INT_ENDP2OUT) {
printf("\n,in EP4 and EP4's function now reserved...");
tmp = D12_ReadLastTransactionStatus(4);
D12_ClearBuff(4);
}
//***************************************
//****ep2 in中断 处理******************
//***************************************
if(i&D12_INT_ENDP2IN) {
printf("\n,in EP5");
tmp = D12_ReadLastTransactionStatus(5);
xmit_left = SEND_BUFF.len - SEND_BUFF.cnt;
printf("\n++++++xmit_len = %d",SEND_BUFF.len);
printf("\n++++++xmit_cnt = %d",SEND_BUFF.cnt);
printf("\n++++++xmit_left = %d",xmit_left);
if(xmit_left >0) {
if(xmit_left >64)
xmit_left = 64;
D12_WriteEndpoint(5, xmit_left, SEND_BUFF.pdata + SEND_BUFF.cnt);
SEND_BUFF.cnt += xmit_left;
} else {
SEND_BUFF.len = 2000;
SEND_BUFF.cnt = 0;
SEND_BUFF.pdata = SEND_BUFF.buff;
SEND_BUFF.init_data = (U16*)SEND_BUFF.pdata;
for(i = 0; i < 1000; i++) {
*(SEND_BUFF.init_data) = (((i<<8)|(xmit_flag<<4))|(i>>8));
SEND_BUFF.init_data++;
}
SEND_BUFF.init_data = (U16*)SEND_BUFF.pdata;
if(xmit_flag++ == 0x0f)
xmit_flag = 0;
}
}
//***************************************
//****reset中断 处理******************
//***************************************
if(i&D12_INT_BUSRESET) {
printf("\n,in D12_INT_BUSRESET and D12_INT_BUSRESET now reserved...");
}
//***************************************
//****suspend中断 处理*****************
//***************************************
if(i&D12_INT_SUSPENDCHANGE) {
printf("\n,in D12_INT_SUSPENDCHANGE and D12_INT_SUSPENDCHANGE now reserved...");
}
}
void ShowSysClock(int argc, char *argv[])
{
printf("System is running @%dHz\n", MCLK);
}
int Main(void)
{
int i;
int flag;
//ChangePllValue(24, 6, 1); //修改系统主频为2倍频
ChangePllValue(120, 8, 1); //修改系统主频为6.4倍频
PortInit();
console_init(57600);
rINTMSK=0xffffffff;
initIRQ();//enable irq
Time5IntTest();
Test_Eint();
rINTMSK=~(BIT_EINT4567|BIT_GLOBAL|BIT_TIMER5|BIT_EINT0);
next_line();
puts(table_begin);
puts("USB_ETH for S3C44B0x\n");
ShowSysClock(0, NULL);
printf("Serial Baud rate is %d\n", SERIAL_BAUD);
puts("Build date:");
puts(__DATE__);
putch('-');
puts(__TIME__);
next_line();
puts(table_begin);
s3c44b0_eth_init();
if(readchipid()==0x1210)
{
puts("\nFind Pdiusbd12, chip id = 0x1210");
UsbInit();
}
SEND_BUFF.len = 2000;
SEND_BUFF.cnt = 0;
SEND_BUFF.pdata = SEND_BUFF.buff;
SEND_BUFF.init_data = (U16*)SEND_BUFF.pdata;
for(i = 0; i < 1000; i++) {
*(SEND_BUFF.init_data) = ((i<<8)|(i>>8));
SEND_BUFF.init_data++;
}
SEND_BUFF.init_data = (U16*)SEND_BUFF.pdata;
puts("\nSystem Initialized.");
while(1)
{
flag=s3c44b0_eth_rcv(eth_data,ð_len);
if(flag)
{
U8 k=0;
printf("\n");
for(i=0;i<eth_len;i++)
{
printf(" %2x",eth_data[i]);
k++;
if(k==16&&i!=eth_len)
{
printf("\n");
k=0;
}
}
printf("\n;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n");
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -