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