⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 control.c

📁 smp860运动控制器USB驱动,对从事数控技术开发人员非常有用
💻 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 + -