📄 dsp28112_ra8835.txt
字号:
#include "DSP28_Device.h"
#include "DSP28_Globalprototypes.h"
#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
#define SetClk GpioDataRegs.GPFDAT.bit.GPIOF2 = 1
#define lcd_A0_high GpioDataRegs.GPBDAT.bit.GPIOB7=0x01
#define lcd_A0_low GpioDataRegs.GPBDAT.bit.GPIOB7=0x00
#define lcd_CS_high GpioDataRegs.GPBDAT.bit.GPIOB6=0x00
#define lcd_CS_low GpioDataRegs.GPBDAT.bit.GPIOB6=0x00
#define lcd_RD_high GpioDataRegs.GPBDAT.bit.GPIOB5=0x01
#define lcd_RD_low GpioDataRegs.GPBDAT.bit.GPIOB5=0x00
#define lcd_WR_high GpioDataRegs.GPBDAT.bit.GPIOB4=0x01
#define lcd_WR_low GpioDataRegs.GPBDAT.bit.GPIOB4=0x00
#define lcd_dir_RD GpioDataRegs.GPADAT.bit.GPIOA9=0x01
#define lcd_dir_WR GpioDataRegs.GPADAT.bit.GPIOA9=0x00
#define F2812_GPIOF14 GpioDataRegs.GPFDAT.bit.GPIOF14 //XF PIN
unsigned int *Led8Lock = (unsigned int *)0x25FF;
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);
void delay(Uint16 data)
{
Uint16 i;
for (i=0;i<data;i++) { ; }
}
void lcd_WR_valid(void)
{
EALLOW;
GpioMuxRegs.GPAMUX.all=0xFD00;//IOPA0~7 IOPB4~7 设置为IO方式IOA9=lcd_WR
GpioMuxRegs.GPBMUX.all=0xFF0F;
GpioMuxRegs.GPADIR.all=0x02FF;//IOPA0~7 IOPB4~7 设置为输出方式
GpioMuxRegs.GPBDIR.all=0x00F0;
EDIS;
}
void lcd_RD_valid(void)
{
EALLOW;
GpioMuxRegs.GPAMUX.all=0xFD00;//IOPA0~7 IOPB4~7 设置为IO方式 IOA9=lcd_RD
GpioMuxRegs.GPBMUX.all=0xFF0F;
GpioMuxRegs.GPADIR.all=0x0200;//IOPA0~7 IOPB4~7 设置为输入方式
GpioMuxRegs.GPBDIR.all=0x00F0;
EDIS;
}
void lcd_wr_cmd(Uint16 cmd)
{
lcd_WR_valid();
lcd_dir_WR;
GpioDataRegs.GPADAT.all=(cmd & 0x00FF);//写控制命令,IOA9=0(LCD_RW=0,写数据有效);
lcd_CS_low;
lcd_A0_high;
lcd_WR_low;
delay(200);
lcd_WR_high;
lcd_CS_high;
}
void lcd_wr_data(Uint16 data)
{
lcd_WR_valid();
lcd_dir_WR;
GpioDataRegs.GPADAT.all=(data&0x00FF);//写数据,IOA9=0(LCD_RW=0,写数据有效);
lcd_CS_low;
lcd_WR_low;
lcd_A0_low;
delay(200);
lcd_WR_high;
lcd_CS_high;
lcd_A0_high;
}
Uint16 lcd_cmd_read(void)
{
Uint16 address_cmd;
lcd_RD_valid();
lcd_dir_RD;
GpioDataRegs.GPADAT.all=0xFF;
lcd_CS_low;
lcd_A0_low;
lcd_RD_low;
address_cmd=GpioDataRegs.GPADAT.all&(0x00FF);
delay(20);
lcd_RD_high;
lcd_CS_high;
lcd_A0_low;
return(address_cmd);
}
Uint16 lcd_data_read(void)
{
Uint16 address_data;
lcd_RD_valid();
lcd_dir_RD;
GpioDataRegs.GPADAT.all=0xFF;
lcd_CS_low;
lcd_A0_high;
lcd_RD_low;
address_data=GpioDataRegs.GPADAT.all&(0x00FF);
delay(20);
lcd_RD_high;
lcd_CS_high;
lcd_A0_high;
return(address_data);
}
void lcd_initial(void)
{
//system set p1~p8
lcd_wr_cmd(0x40);
lcd_wr_data(0x30);
lcd_wr_data(0x87);
lcd_wr_data(0x07);
lcd_wr_data(0x27);
lcd_wr_data(0x37);
lcd_wr_data(0xef);
lcd_wr_data(0x28);
lcd_wr_data(0x00);
//scroll set
lcd_wr_cmd(0x44);
lcd_wr_data(0x00);//sa1-L
lcd_wr_data(0x00);//sa1-H
lcd_wr_data(0xF0);//sL1
lcd_wr_data(0x80);//sa2-L
lcd_wr_data(0x25);//sa2-H
lcd_wr_data(0xF0);//sa2
lcd_wr_data(0x00);//sa3-L
lcd_wr_data(0x3A);//sa3-H
lcd_wr_data(0x00);//sa4-L
lcd_wr_data(0x3A);//SA4-H
lcd_wr_cmd(0x5A); //hdot scr
lcd_wr_data(0x00);
lcd_wr_cmd(0x58);//disp off
lcd_wr_data(0x54);
lcd_wr_cmd(0x5d);//csr form
lcd_wr_data(0x00);//crx
lcd_wr_data(0x00);//cry
lcd_wr_cmd(0x59);//disp on
lcd_wr_data(0x54);
lcd_wr_cmd(0x5b);
lcd_wr_data(0x00);
}
void lcd_cursor_xy(Uint16 x, Uint16 y)
{
lcd_wr_cmd(0x46);
lcd_wr_data(x);
lcd_wr_data(y);
}
void lcd_busy(void)
{
Uint16 busy;
do
{
busy=(lcd_cmd_read()&0x40);
}while(busy);
}
void lcd_clear(void)
{
Uint16 i;
lcd_cursor_xy(0x00,0x00);
lcd_wr_cmd(0x42);
for(i=0;i<0x7FFF;i++)
lcd_wr_data(0x00);
}
void test(void)
{
Uint16 i;
lcd_wr_cmd(0x42);
for(i=0;i<9600;i++)
lcd_wr_data(0x00);
/* if (((i/80)%2)==0)
lcd_wr_data(0xAA);
else
lcd_wr_data(0xff);*/
}
void main(void)
{
/*初始化系统*/
InitSysCtrl();
/*关中断*/
DINT;
IER = 0x0000;
IFR = 0x0000;
/*初始化PIE*/
InitPieCtrl();
/*初始化PIE中断矢量表*/
InitPieVectTable();
/*初始化外设*/
InitPeripherals();
InitGpio();
EALLOW;
PieVectTable.TINT0 = &ISRTimer0;
PieVectTable.TINT2 = &ISRTimer2;
EDIS;
/*设置CPU*/
ConfigCpuTimer(&CpuTimer0, 10, 1000000);
ConfigCpuTimer(&CpuTimer2, 50, 1000000);
// StartCpuTimer0();
StartCpuTimer2();
/*开中断*/
IER |= M_INT1;
IER |= M_INT14;
PieCtrl.PIEIER1.bit.INTx7=1;
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
*Led8Lock = 0XB7;
EALLOW;
GpioMuxRegs.GPFMUX.bit.XF_GPIOF14 = 0;
GpioMuxRegs.GPFDIR.bit.GPIOF14 = 1;
EDIS;
F2812_GPIOF14 = 0;
lcd_initial();
lcd_clear();
lcd_cursor_xy(0x80,0x25);
while(1)
{test();
delay(2000);};
// for(;;);
}
interrupt void ISRTimer0(void)
{
PieCtrl.PIEACK.bit.ACK7=1;
LedCount++;
if (LedCount>4)
{
F2812_GPIOF14 = ~F2812_GPIOF14;
LedCount=0;
}
}
interrupt void ISRTimer2(void)
{
SendData(SpiCode[SpiCount]);
SpiCount++;
if (SpiCount>16){ SpiCount=0;
F2812_GPIOF14 = ~F2812_GPIOF14;}
}
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;
}
//===========================================================================
// No more.
//===========================================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -