?? sci_test.c
字號:
#include "DSP28_Device.h"
#include "ext_inf.h"
unsigned int Sci_VarRx[256];
unsigned int i,j;
unsigned int Send_Flag;
void wait(int nWait);
unsigned int Led_Flag;
extern Uint16 ScanKey(void);
#define SetData GpioDataRegs.GPFDAT.bit.GPIOF0 = 1
#define ClrData GpioDataRegs.GPFDAT.bit.GPIOF0 = 0
#define SetClk GpioDataRegs.GPFDAT.bit.GPIOF2 = 1
#define ClrClk GpioDataRegs.GPFDAT.bit.GPIOF2 = 0
unsigned int * LedReg = (unsigned int *) 0x23FF; //發光二極管控制寄存器
unsigned int * Led8Lock= (unsigned int *) 0x25FF; //數碼管控制寄存器
//unsigned int *LedReg = (unsigned int *)0x23FF;
//unsigned int *Led8Lock = (unsigned int *)0x25FF;
const Uint16 LedCode[]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFF};
const Uint16 SpiCode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF};
Uint16 LedCount = 0;
Uint16 SpiCount = 0;
interrupt void ISRTimer0(void);
interrupt void ISRTimer2(void);
void SendData(Uint16 data);
//ad
float a1[16];
unsigned int a2=0;
float adclo=0.0;
interrupt void ad(void);
void main(void)
{
int mn;
Uint16 Temp;
/*初始化系統*/
InitSysCtrl();
/*關中斷*/
DINT;
IER = 0x0000;
IFR = 0x0000;
Led_Flag = 0;
/*初始化PIE*/
InitPieCtrl();
/*初始化PIE中斷矢量表*/
InitPieVectTable();
/*初始化外設*/
InitPeripherals();
InitGpio();
EALLOW;
PieVectTable.TXAINT = &SCITXINTA_ISR;
PieVectTable.RXAINT = &SCIRXINTA_ISR;
PieVectTable.TINT0 = &ISRTimer0;
PieVectTable.TINT2 = &ISRTimer2;
EDIS;
/*設置CPU*/
ConfigCpuTimer(&CpuTimer0, 10, 1000000);
ConfigCpuTimer(&CpuTimer2, 50, 1000000);
//ConfigCpuTimer(&CpuTimer2, 50, 2000000);
StartCpuTimer0();
StartCpuTimer2();
PieCtrl.PIEIER1.bit.INTx7=1;
/*開中斷*/
// IER |= M_INT14|M_INT9;
InitSci();
IER |= M_INT1;
IER |= M_INT14;
IER |=M_INT9;
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
*LedReg = 0xFF;
*Led8Lock = 0xB7;
SendData(0xFF);
// lcd_init();
// clearscr1();
// clearscr2();
// clearscr3();
// Smenu();
// for(;;);
/*初始化系統*/
// InitSysCtrl();
/*關中斷*/
// DINT;
// IER = 0x0000;
// IFR = 0x0000;
/*初始化PIE中斷*/
// InitPieCtrl();
/*初始化PIE中斷矢量表*/
// InitPieVectTable();
/*初始化SCIA寄存器*/
// InitSci();
for(i = 0; i < 100; i++)
{
Sci_VarRx[i] = 0;
}
i = 0;
j = 0;
Send_Flag = 0;
// InitAdc();
// Enable INT14 which is connected to CPU-Timer 2:
// IER |= M_INT1;
// EALLOW;
// PieVectTable.TINT2 = &ISRTimer2;
// PieVectTable.ADCINT=&ad;
// EDIS;
/*設置CPU*/
// ConfigCpuTimer(&CpuTimer2, 50, 1000000);
//StartCpuTimer2();
/*開中斷*/
//IER |= M_INT14;
// EINT; // Enable Global interrupt INTM
// ERTM; // Enable Global realtime interrupt DBGM
// *LedReg = 0xFF;
// *Led8Lock = 0xB7;
// SendData(0xFF);
// *LedReg = 0xAA;
// for(;;);
// while(AdcRegs.ADC_ST_FLAG.bit.SEQ1_BSY==0)
// {
//
// AdcRegs.ADCTRL2.bit.SOC_SEQ1=1;
//
// }
for(mn=0;mn<7;mn++){
PieCtrl.PIEACK.bit.ACK7=1;
*LedReg = LedCode[mn];
wait(1024);
}
for(;;)
{
// Temp = ScanKey();
// KeyFunction(Temp);
if((SciaTx_Ready() == 1) && (Send_Flag == 1))
{
SciaRegs.SCITXBUF = Sci_VarRx[i];
Send_Flag = 0;
i++;
if(i == j)
{
i = 0;
j = 0;
}
}
/* #if !SCIA_INT
if(SciaRx_Ready() == 1)
{
Sci_VarRx[j] = SciaRegs.SCIRXBUF.all;
Send_Flag = 1;
j++;
if(j == 100)
{
j = 0;
}
}
#endif*/
Temp = KeyReg;
Temp = Temp & 0xff;
if(Temp!=0xff) KeyFunction(Temp);
}
}
interrupt void ISRTimer0(void)
{
PieCtrl.PIEACK.bit.ACK7=1;
*LedReg = LedCode[LedCount];
LedCount++;
if (LedCount>8) LedCount=0;
}
interrupt void ISRTimer2(void)
{
SendData(SpiCode[SpiCount]);
SpiCount++;
if (SpiCount>16) SpiCount=0;
}
void Delay(Uint16 data)
{
Uint16 i;
for (i=0;i<data;i++) { ; }
}
void SendData(Uint16 data)
{
Uint16 i,Temp;
Temp = 0x80;
for (i=0;i<8;i++)
{
if ((data & Temp)==0) ClrData;
else SetData;
Temp >>= 1;
ClrClk;
Delay(10);
SetClk;
}
*Led8Lock = 0xB7;
Delay(10);
*Led8Lock = 0xBF;
SetData;
}
/*
interrupt void ISRTimer2(void)
{
CpuTimer2.InterruptCount++;
if(Led_Flag == 1)
{
*LedReg = 0xAA;
Led_Flag = 0;
}
else
{
*LedReg = 0x55;
Led_Flag = 1;
}
}
void SendData(Uint16 data)
{
Uint16 i,Temp;
Temp = 0x80;
for (i=0;i<8;i++)
{
if ((data & Temp)==0) ClrData;
else SetData;
Temp >>= 1;
ClrClk;
SetClk;
}
*Led8Lock = 0xB7;
*Led8Lock = 0xBF;
SetData;
}
*/
interrupt void ad(void)
{
IFR=0x0000;
// PieCtrl.PIEIFR1.all = 0;
PieCtrl.PIEACK.all=0xffff;
a2++;
a1[0]=((float)AdcRegs.RESULT0)*3.0/65520.0+adclo;
a1[1]=((float)AdcRegs.RESULT1)*3.0/65520.0+adclo;
a1[2]=((float)AdcRegs.RESULT2)*3.0/65520.0+adclo;
a1[3]=((float)AdcRegs.RESULT3)*3.0/65520.0+adclo;
a1[4]=((float)AdcRegs.RESULT4)*3.0/65520.0+adclo;
a1[5]=((float)AdcRegs.RESULT5)*3.0/65520.0+adclo;
a1[6]=((float)AdcRegs.RESULT6)*3.0/65520.0+adclo;
a1[7]=((float)AdcRegs.RESULT7)*3.0/65520.0+adclo;
a1[8]=((float)AdcRegs.RESULT8)*3.0/65520.0+adclo;
a1[9]=((float)AdcRegs.RESULT9)*3.0/65520.0+adclo;
a1[10]=((float)AdcRegs.RESULT10)*3.0/65520.0+adclo;
a1[11]=((float)AdcRegs.RESULT11)*3.0/65520.0+adclo;
a1[12]=((float)AdcRegs.RESULT12)*3.0/65520.0+adclo;
a1[13]=((float)AdcRegs.RESULT13)*3.0/65520.0+adclo;
a1[14]=((float)AdcRegs.RESULT14)*3.0/65520.0+adclo;
a1[15]=((float)AdcRegs.RESULT15)*3.0/65520.0+adclo;
AdcRegs.ADC_ST_FLAG.bit.INT_SEQ1_CLR=1;
AdcRegs.ADCTRL2.bit.SOC_SEQ1=1;
EINT;
}
void wait(int nWait)
{
int di,dj,dk=0;
for ( di=0;di<nWait;di++ )
for ( dj=0;dj<64;dj++ )
dk++;
}
//===========================================================================
// No more.
//===========================================================================
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -