📄 control.c
字号:
#include "def.h"
#include "config.h"
#include "board.h"
#include "44b.h"
#include "option.h"
#include "utils.h"
extern char Image$$RO$$Limit[];
extern char Image$$RO$$Base[];
extern char Image$$RW$$Limit[];
extern char Image$$RW$$Base[];
extern char Image$$ZI$$Limit[];
extern char Image$$ZI$$Base[];
void ShowBootInfo(void)
{
puts("\n ***************************************\n");
printf( " Image$$RO$$Base = 0x%x\n", Image$$RO$$Base );
printf( " Image$$RO$$Limit = 0x%x\n", Image$$RO$$Limit );
printf( " Image$$RW$$Base = 0x%x\n", Image$$RW$$Base );
printf( " Image$$RW$$Limit = 0x%x\n", Image$$RW$$Limit );
printf( " Image$$ZI$$Base = 0x%x\n", Image$$ZI$$Base );
printf( " Image$$ZI$$Limit = 0x%x\n", Image$$ZI$$Limit );
puts(" ***************************************\n");
}
void PortInit(void)
{
//CAUTION:Follow the configuration order for setting the ports.
// 1) setting value
// 2) setting control register
// 3) configure pull-up resistor.
//16bit data bus configuration
//PORT A GROUP
//ADDR24 ADDR23 ADDR22 ADDR21 ADDR20 ADDR19 ADDR18 ADDR17 ADDR16 ADDR0
// 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
rPCONA=0x3ff;
//PORT B GROUP
// GPB10 GPB9 GPB8 GPB7 GPB6 GPB5 GPB4 GPB3 GPB2 GPB1 GPB0
// nGCS5 nGCS4 nGCS3 nGCS2 nGCS1 nWBE3 nWBE2 nSRAS nSCAS SCLK SCKE
// 0, 1, x1, x1, x1, x0, x0, 1, 1, 1, 1
rPDATB=0x000;
rPCONB=0x3cf; //GPB10=BUSY from FPGA Busy input
//PORT C GROUP
//BUSWIDTH=16 */
/* PC15 14 13 12 11 10 9 8 */
/* o o RXD1 TXD1 o i o o */
/* NC NC Uart1 Uart1 NC NC NC NC */
/* 01 01 11 11 01 00 01 01 */
/* PC7 6 5 4 3 2 1 0 */
/* o o o o o o o o */
/* NC NC NC NC NFALE NFCLE NFCE NFRB*/
/* 01 01 01 01 01 01 01 00 */
rPCONC = 0x5f455554;
rPDATC = 0x4000; //All IO is low
rPUPC = 0x0300; //PULL UP RESISTOR should be enabled to I/O
//PORT D GROUP
//VFRAME VM VLINE VCLK VD3 VD2 VD1 VD0
// 10,10, 10, 10, 10, 10, 10, 10
rPDATD= 0x55;///
rPCOND=0xaaaa;
rPUPD=0xff;///
//PORT E GROUP
/* Bit 8 7 6 5 4 3 2 1 0 */
/* ENDLAN LED3 LED2 LED1 LED0 BEEP RXD0 TXD0 CLKOUT */
/* 00 01 01 01 01 01 10 10 11 */
rPDATE = 0x357;
rPCONE = 0x556b;
rPUPE = 0x6;
//PORT F GROUP
//All input
/* Bit 8 7 6 5 4 3 2 1 0 */
/* IN IN IN IN OUT OUT In IN IN */
/* 000 000 000 000 01 01 00 00 00 */
// 0x0
rPDATF=0x1ef;
rPCONF=0x00140;
rPUPF=0x000;
//PORT G GROUP
/* BIT7 6 5 4 3 2 1 0 */
/* INT7 INT6 INT5 INT4 INT3 INT2 INT1 INT0 */
/* S3 S4 S5 S6 NIC EXT IDE USB */
/* 11 11 00 11 00 11 11 11 */
//PORT G GROUP
//All input
// 0x0
rPDATG = 0xff;
rPCONG = 0xf73f;
rPUPG = 0x00; //should be enabled
rSPUCR=0x7; //D15-D0 pull-up disable
rEXTINT=0x22222222; //All EINT[7:0] will be falling edge triggered.
}
void Beep(U32 freq, U32 ms)
{
/* rTCON &= ~0xf0000; // clear manual update bit, stop Timer3
rTCFG0 &= ~0xff00; // set Timer 2&3 prescaler 0
rTCFG1 &= ~0xf000; // set Timer 3 MUX 1/16
rTCFG1 |= 0x3000;
rTCNTB3 = GetCpuClock()/(2100*16); //if set inverter off, when TCNT2<=TCMP2, TOUT is high, TCNT2>TCMP2, TOUT is low
rTCMPB3 = rTCNTB3>>1; //if set inverter on, when TCNT2<=TCMP2, TOUT is low, TCNT2>TCMP2, TOUT is high
rTCON |= 0x20000; // manual update
rTCON &= ~0x20000; // clear manal update bit
rTCON |= 0xd0000; // auto reload, inverter on, start Timer 2
Delay(ms);
rTCON &= ~0x10000;*/
}
/*#define LED1_ON() (rPDATE |= 0x20)
#define LED2_ON() (rPDATC |= 2)
#define LED3_ON() (rPDATC |= 4)
#define LED4_ON() (rPDATC |= 8)
#define LED1_OFF() (rPDATE &= ~0x20)
#define LED2_OFF() (rPDATC &= ~2)
#define LED3_OFF() (rPDATC &= ~4)
#define LED4_OFF() (rPDATC &= ~8)*/
void LedSet(U32 LedStatus)
{
/* if(LedStatus&1)
LED1_ON();
else
LED1_OFF();
if(LedStatus&2)
LED2_ON();
else
LED2_OFF();
if(LedStatus&4)
LED3_ON();
else
LED3_OFF();
if(LedStatus&8)
LED4_ON();
else
LED4_OFF();*/
}
void MemCfgInit(void)
{
rNCACHBE0 = ((unsigned int)(Non_Cache_End>>12)<<16)|(Non_Cache_Start>>12);
rNCACHBE1 = (0xf000U<<16)|(0xe000);
}
void BoardInitStart(void)
{
}
void BoardInitEnd(void)
{
}
void BoardPrepareRun(void)
{
}
void CacheDisable(void)
{
rSYSCFG = SYSCFG_0KB;
}
void CacheEnable(void)
{
rSYSCFG = SYSCFG_8KB;
}
void CacheFlush(void)
{
int i, saveSyscfg;
saveSyscfg = rSYSCFG;
rSYSCFG = SYSCFG_0KB;
for(i = 0x10004000; i<0x10004800; i+=16)
*((int *)i) = 0x0;
rSYSCFG = saveSyscfg;
}
#define NAND_DAT 0x02000000
#define NAND_ALE 0x02000008
#define NAND_CLE 0x02000004
void NFChipSel(U32 sel)
{
if(sel)
rPDATC &= ~(1<<14);
else
rPDATC |= (1<<14) ;
}
int NFIsReady(void)
{
return rPDATC&(1<<10);
}
void NFWrCmd(int cmd)
{
*(volatile U8 *)NAND_CLE = cmd;
}
void NFWrAddr(int addr)
{
*(volatile U8 *)NAND_ALE = addr;
}
void NFWrDat(int dat)
{
*(volatile U8 *)NAND_DAT = dat;
}
int NFRdDat(void)
{
return *(volatile U8 *)NAND_DAT;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -