//菜农HotPower@126.com 2008.4.17 1:58<br />void SystemObj::InitSpi(void)<br />{<br /><br /> EALLOW;<br /> GpioMuxRegs.GPFMUX.all |= 0x000F; // Select GPIOs to be SPI pins <br /> // Port F MUX - x000 0000 0000 1111<br /> EDIS;<br /><br />// Initialize SPI FIFO registers<br /> SpiaRegs.SPIFFTX.all=0xE040;<br /> SpiaRegs.SPIFFRX.all=0x204f;<br /> SpiaRegs.SPIFFCT.all=0x0;<br /><br /> SpiaRegs.SPICCR.all =0x0008; // Reset on, rising edge, 8-bit char bits <br /> SpiaRegs.SPICTL.all =0x0006; // Enable master mode, normal phase,<br /> // enable talk, and SPI int disabled.<br /> SpiaRegs.SPIBRR =0x007F; <br /> SpiaRegs.SPICCR.all =0x009F; // Relinquish SPI from Reset <br /> SpiaRegs.SPIPRI.bit.FREE = 1; // Set so breakpoints don't disturb xmission<br /> <br /> //(CLKPOLARITY,CLK_PHASE )01 10支持74HC595,00或11不支持 测试通过 <br /> SpiaRegs.SPICCR.bit.CLKPOLARITY = 1;<br /> SpiaRegs.SPICTL.bit.CLK_PHASE = 0;<br /> <br /> System.SpiReadWrite(0xff);//LED数码管灭<br /> //发送595锁存脉冲信号RCLK<br /> SpiRclkRegs = 0;<br /> SpiRclkRegs = 1;<br />}<br /><br />//硬件SPI读写一体化函数<br />unsigned char SystemObj::SpiReadWrite(unsigned char cData)<br />{<br /> SpiaRegs.SPITXBUF = cData;<br /> // Wait until data is received<br /> while(SpiaRegs.SPIFFRX.bit.RXFFST !=1) <br /> { <br />// KickDog();//喂狗测试<br /> } <br /> // Check against sent data<br /> return SpiaRegs.SPIRXBUF; <br />}<br /><br /><br /><br />//数码管<br />#define LedSegA 0x01<br />#define LedSegB 0x02<br />#define LedSegC 0x04<br />#define LedSegD 0x08<br />#define LedSegE 0x10<br />#define LedSegF 0x20<br />#define LedSegG 0x40<br />#define LedSegH 0x80<br />/*<br />#define LedSegA 0x80<br />#define LedSegB 0x40<br />#define LedSegC 0x20<br />#define LedSegD 0x10<br />#define LedSegE 0x08<br />#define LedSegF 0x04<br />#define LedSegG 0x02<br />#define LedSegH 0x01<br />*/<br /><br />#define LedChar0 (LedSegA + LedSegB + LedSegC + LedSegD + LedSegE + LedSegF )<br />#define LedChar1 ( LedSegB + LedSegC )<br />#define LedChar2 (LedSegA + LedSegB + LedSegD + LedSegE + LedSegG)<br />#define LedChar3 (LedSegA + LedSegB + LedSegC + LedSegD + LedSegG)<br />#define LedChar4 ( LedSegB + LedSegC + LedSegF + LedSegG)<br />#define LedChar5 (LedSegA + LedSegC + LedSegD + LedSegF + LedSegG)<br />#define LedChar6 (LedSegA + LedSegC + LedSegD + LedSegE + LedSegF + LedSegG)<br />#define LedChar7 (LedSegA + LedSegB + LedSegC )<br />#define LedChar8 (LedSegA + LedSegB + LedSegC + LedSegD + LedSegE + LedSegF + LedSegG)<br />#define LedChar9 (LedSegA + LedSegB + LedSegC + LedSegD + LedSegF + LedSegG)<br />#define LedCharA (LedSegA + LedSegB + LedSegC + LedSegE + LedSegF + LedSegG)<br />#define LedCharB ( LedSegC + LedSegD + LedSegE + LedSegF + LedSegG)<br />#define LedCharC (LedSegA + LedSegD + LedSegE + LedSegF )<br />#define LedCharD ( LedSegB + LedSegC + LedSegD + LedSegE + LedSegG)<br />#define LedCharE (LedSegA + LedSegD + LedSegE + LedSegF + LedSegG)<br />#define LedCharF (LedSegA + LedSegE + LedSegF + LedSegG)<br /><br /><br /><br />interrupt void ISRTimer2(void)<br />{<br />//以下定义为共阳数码管<br />static const unsigned char LedTab[] = <br />{//显示字符表存放在ROM中<br /> LedChar0, LedChar1, LedChar2, LedChar3,<br /> LedChar4, LedChar5, LedChar6, LedChar7,<br /> LedChar8, LedChar9, LedCharA, LedCharB,<br /> LedCharC, LedCharD, LedCharE, LedCharF<br />};<br /> System.SpiReadWrite(~LedTab[Timer.Count2 & 0x0f]);//硬件SPI读写一体化函数<br /> Timer.Count2++;<br />//发送595锁存脉冲信号RCLK<br /> SpiRclkRegs = 0;<br /> SpiRclkRegs = 1;<br />}<br /><br />//数码管<br />#define LedSegA 0x01<br />#define LedSegB 0x02<br />#define LedSegC 0x04<br />#define LedSegD 0x08<br />#define LedSegE 0x10<br />#define LedSegF 0x20<br />#define LedSegG 0x40<br />#define LedSegH 0x80<br />/*<br />#define LedSegA 0x80<br />#define LedSegB 0x40<br />#define LedSegC 0x20<br />#define LedSegD 0x10<br />#define LedSegE 0x08<br />#define LedSegF 0x04<br />#define LedSegG 0x02<br />#define LedSegH 0x01<br />*/<br /><br />#define LedChar0 (LedSegA + LedSegB + LedSegC + LedSegD + LedSegE + LedSegF )<br />#define LedChar1 ( LedSegB + LedSegC )<br />#define LedChar2 (LedSegA + LedSegB + LedSegD + LedSegE + LedSegG)<br />#define LedChar3 (LedSegA + LedSegB + LedSegC + LedSegD + LedSegG)<br />#define LedChar4 ( LedSegB + LedSegC + LedSegF + LedSegG)<br />#define LedChar5 (LedSegA + LedSegC + LedSegD + LedSegF + LedSegG)<br />#define LedChar6 (LedSegA + LedSegC + LedSegD + LedSegE + LedSegF + LedSegG)<br />#define LedChar7 (LedSegA + LedSegB + LedSegC )<br />#define LedChar8 (LedSegA + LedSegB + LedSegC + LedSegD + LedSegE + LedSegF + LedSegG)<br />#define LedChar9 (LedSegA + LedSegB + LedSegC + LedSegD + LedSegF + LedSegG)<br />#define LedCharA (LedSegA + LedSegB + LedSegC + LedSegE + LedSegF + LedSegG)<br />#define LedCharB ( LedSegC + LedSegD + LedSegE + LedSegF + LedSegG)<br />#define LedCharC (LedSegA + LedSegD + LedSegE + LedSegF )<br />#define LedCharD ( LedSegB + LedSegC + LedSegD + LedSegE + LedSegG)<br />#define LedCharE (LedSegA + LedSegD + LedSegE + LedSegF + LedSegG)<br />#define LedCharF (LedSegA + LedSegE + LedSegF + LedSegG)<br /><br /> |
|