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

📄 class.cpp

📁 dsp2812上的零耗时键盘 c++源代码例子
💻 CPP
字号:

#include "class.h"

class SystemObj;

SystemObj::SystemObj (void)
{
    Init ();
}

//inline
void SystemObj::Init(void)
{
	/*初始化系统*/
	InitSysCtrl();

	/*关中断*/
	DINT;
	IER = 0x0000;
	IFR = 0x0000;

	/*初始化PIE*/
	InitPieCtrl();

	/*初始化PIE中断矢量表*/
	InitPieVectTable();	
	
	/*初始化外设*/
    InitPeripherals();//DSP281x_InitPeripherals.c内的InitEv()没干活

	InitEv();

	InitGpio();
	::InitXIntrupt();//DSP281x_XIntrupt.c内的InitXIntrupt()没干活

	InitXIntrupt();
    
    if (RamTest != 0x55aa)
    {
    	RamTest = 0x55aa;
    }
    LedKeyRegs = 0;
    InitWatchdog();
    InitBeep();
    InitSpi();
}

void SystemObj::InitEv(void)
{
    EALLOW;
	/*初始化EV*/
    EvaRegs.EVAIMRA.all = 0;
    EvaRegs.EVAIMRB.all = 0;
    EvaRegs.EVAIMRC.all = 0;

    EvbRegs.EVBIMRA.all = 0;
    EvbRegs.EVBIMRB.all = 0;
    EvbRegs.EVBIMRC.all = 0;
    EDIS;
}

void SystemObj::InitXIntrupt(void)
{
    EALLOW;
	XIntruptRegs.XINT1CR.bit.ENABLE = 1;
	XIntruptRegs.XINT1CR.bit.POLARITY =0;
	XIntruptRegs.XINT2CR.bit.ENABLE = 0;
	XIntruptRegs.XNMICR.bit.ENABLE = 0;
    EDIS;
	
    
	EALLOW;	
	PieVectTable.XINT1 = &ISRExtInt1;
	EDIS;   

    /*开中断*/
	IER |= M_INT1;  //外部中断1所的的PIE分组	
    PieCtrlRegs.PIEIER1.bit.INTx4 = 1;  ///外部中断1所在PIE分组1中的第4位
}

void SystemObj::InitWatchdog(void)
{
	EALLOW;
//	SysCtrlRegs.SCSR = BIT1;
	SysCtrlRegs.SCSR = 0x0004;
    SysCtrlRegs.WDKEY = 0x0055;
    SysCtrlRegs.WDKEY = 0x00AA;
//    SysCtrlRegs.WDCR = 0x0028;   
    SysCtrlRegs.WDCR = 0x002F;   
	EDIS;
}

void SystemObj::InitBeep(void)
{
    EALLOW;
  	GpioMuxRegs.GPDMUX.bit.T3CTRIP_PDPB_GPIOD5 = 0;//蜂鸣器控制管脚,D5脚 
  	GpioMuxRegs.GPDDIR.bit.GPIOD5 = 1; //D5脚配置为输出
	EDIS;
}

void SystemObj::BeepOn(void)
{
    GpioDataRegs.GPDSET.bit.GPIOD5 = 1;
}

void SystemObj::BeepOff(void)
{
    GpioDataRegs.GPDCLEAR.bit.GPIOD5 = 1;
}

void SystemObj::BeepToggle(void)
{
    GpioDataRegs.GPDTOGGLE.bit.GPIOD5 = 1;
}

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
    
    //01 10 
    SpiaRegs.SPICCR.bit.CLKPOLARITY = 1;
    SpiaRegs.SPICTL.bit.CLK_PHASE = 0;
    
	SpiRclkRegs = 0;
    SpiRclkRegs = 1;
	System.SpiReadWrite(0xff);
	SpiRclkRegs = 0;
	SpiRclkRegs = 1;
}

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;				
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -