📄 bsp.c
字号:
/*
*********************************************************************************************************
* INCLUDE FILES
*********************************************************************************************************
*/
#define BSP_GLOBALS
#include <includes.h>
/*
*********************************************************************************************************
* LOCAL GLOBAL VARIABLES
*********************************************************************************************************
*/
CPU_INT32U VIC_SpuriousInt;
/*
*********************************************************************************************************
* LOCAL FUNCTION PROTOTYPES
*********************************************************************************************************
*/
static void LED_Init (void);
static void BSP_IO_Init (void);
static void BSP_PLL_Init (void);
static void VIC_Init (void);
static void VIC_Dummy (void);
static void VIC_DummyWDT (void);
static void VIC_DummyTIMER0(void);
static void VIC_DummyTIMER1(void);
static void VIC_DummyUART0 (void);
static void VIC_DummyUART1 (void);
static void VIC_DummyPWM0 (void);
static void VIC_DummyI2C (void);
static void VIC_DummySPI (void);
static void VIC_DummyRTC (void);
static void VIC_DummyEINT0 (void);
static void VIC_DummyEINT1 (void);
static void VIC_DummyEINT2 (void);
static void LCD_WriteCommand3(CPU_INT08U cmd, CPU_INT08U dat1, CPU_INT08U dat2);
static void LCD_WriteCommand1(CPU_INT08U cmd);
static void LCD_Command_Data_OK(void);
static void LCD_NormalWrite_Data(CPU_INT08U data);
/*
*********************************************************************************************************
* BSP_Init()
*
* Description : Initialize the Board Support Package (BSP).
*
* Argument(s) : none.
*
* Return(s) : none.
*
* Note(s) : (1) This function SHOULD be called before any other BSP function is called.
*********************************************************************************************************
*/
void BSP_Init (void)
{
BSP_PLL_Init(); /* Initialize PLL0 and the VPB Divider Register */
BSP_IO_Init(); /* Initialize the board's I/Os */
VIC_Init(); /* Initialize the Vectored Interrupt Controller */
LED_Init(); /* Initialize the LED controls */
}
/*
*********************************************************************************************************
* BSP_IntDisAll()
*
* Description : Disable ALL interrupts.
*
* Argument(s) : none.
*
* Return(s) : none.
*********************************************************************************************************
*/
void BSP_IntDisAll (void)
{
VICIntEnClr = 0xFFFFFFFFL; /* Disable ALL interrupts */
}
/*
*********************************************************************************************************
*********************************************************************************************************
** uC/LCD FUNCTIONS
*********************************************************************************************************
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* Function: LCD_Delay()
* Description:return the status of LCD controller.
* Accroding to the cpu clock,the delay value need to be changed.
*********************************************************************************************************
*/
void LCD_Delay(CPU_INT16U delay)
{
volatile CPU_INT16U i;
for(i = 0; i < delay; i++);
}
/*
*********************************************************************************************************
* Function: LCD_GET_STATUS()
* Description:return the status of LCD controller
*关于T6963C的状态位说明:
* STA0是否可以继续执行命令:1可以0不可以;
* STA1是否可以读写数据: 1可以0不可以;
*
* STA2是否可以自动读数据:1可以0不可以;
* STA3是否可以自动写数据:1可以0不可以;
*
* STA4没有使用
*
* STA5控制器操作状态:1使能0禁止
* STA6屏幕读和屏幕复制命令执行结果:1错误0无错
* STA7光标闪烁状态;1闪烁0没有
*********************************************************************************************************
*/
CPU_INT08U LCD_Get_Status(void)
{
CPU_INT32U T6963C_STATUS;
IO0DIR = 0x700;
IO0SET |= GPIO0_LCD_CD;/* CD=1 */
LCD_Delay(1);
IO0CLR |= GPIO0_LCD_RD;/* RD=0 */
LCD_Delay(1);
T6963C_STATUS = IO0PIN;/* 读数据 */
IO0SET |= GPIO0_LCD_RD;/* RD=1 */
IO0DIR = 0x7ff;
return (CPU_INT08U)(T6963C_STATUS);/* 返回状态字节 */
}
/*
*********************************************************************************************************
* Function: LCD_Command_Data_OK()
* Description:return the status of LCD controller
*关于T6963C的状态位说明:
* STA2是否可以自动读数据:1可以0不可以;
*********************************************************************************************************
*/
static void LCD_Command_Data_OK(void)
{
while((LCD_Get_Status()&0x03)!=0x03);
}
/*
*********************************************************************************************************
* Function: LCD_WRITE_COMMAND()
* Description:WRITE A COMMAND TO THE LCD controller
*********************************************************************************************************
*/
void LCD_Write_Command(CPU_INT08U cmd)
{
IO0SET|=GPIO0_LCD_CD;/*CD=1*/
LCD_Delay(1);
IO0CLR|=GPIO0_LCD_DATA;/*将数据端口清零*/
IO0SET|=((CPU_INT32U)(cmd));/*数据出现在端口*/
IO0CLR|=GPIO0_LCD_WR;/*WR=0*/
LCD_Delay(1);
IO0SET|=GPIO0_LCD_WR;/*WR=1*/
}
/*
********************************************************************************************************
**函数名称:LCD_WriteCommand1()
**函数功能:写双参数命令子程序。会先判断LCM状态字。
**入口参数:command 要写入LCM的命令字
**说 明:发送命令字
********************************************************************************************************
*/
static void LCD_WriteCommand1(CPU_INT08U cmd)
{
LCD_Command_Data_OK();
LCD_Write_Command(cmd); // 发送命令字
}
/*
********************************************************************************************************
**函数名称:LCD_WriteCommand3()
**函数功能:写双参数命令子程序。会先判断LCM状态字。
**入口参数:command 要写入LCM的命令字
* dat1 参数1
* dat2 参数2
**说 明:先发送两字节参数据数据,再发送命令字
********************************************************************************************************
*/
static void LCD_WriteCommand3(CPU_INT08U cmd, CPU_INT08U dat1, CPU_INT08U dat2)
{
LCD_NormalWrite_Data(dat1); // 发送数据1
LCD_NormalWrite_Data(dat2); // 发送数据2
LCD_WriteCommand1(cmd); // 发送命令字
}
/*
*********************************************************************************************************
* Function: LCD_WRITE_DATA()
* Description:WRITE A DATA TO THE LCD controller
*********************************************************************************************************
*/
void LCD_Write_Data(CPU_INT08U data)
{
IO0CLR|=GPIO0_LCD_CD;/*CD=0*/
LCD_Delay(1);
IO0CLR|=GPIO0_LCD_DATA;/*将数据端口清零*/
IO0SET|=GPIO0_LCD_DATA&(((CPU_INT32U)(data)));/*数据出现在端口*/
IO0CLR|=GPIO0_LCD_WR;/*WR=0*/
LCD_Delay(1);
IO0SET|=GPIO0_LCD_WR;/*WR=1*/
IO0SET|=GPIO0_LCD_CD;/*CD=1*/
}
/*
*********************************************************************************************************
* Function: LCD_NormalWrite_Data()
* Description:WRITE A DATA TO THE LCD controller normally
*********************************************************************************************************
*/
static void LCD_NormalWrite_Data(CPU_INT08U data)
{
LCD_Command_Data_OK();
LCD_Write_Data(data);
}
/*
*********************************************************************************************************
* Function: LCD_Read_Data()
* Description:READ A DATA TO THE LCD controller
*********************************************************************************************************
*/
CPU_INT08U LCD_Read_Data(void)
{
CPU_INT32U data;
IO0DIR = 0x700;
IO0CLR|=GPIO0_LCD_CD;/*CD=0*/
LCD_Delay(1);
IO0CLR|=GPIO0_LCD_RD;/*RD=0*/
LCD_Delay(1);
data=IO0PIN;
IO0SET|=GPIO0_LCD_RD;/*RD=1*/
IO0SET|=GPIO0_LCD_CD;/*CD=1*/
IO0DIR = 0x7ff;
return (CPU_INT08U)(data);
}
/*
*********************************************************************************************************
* Function: LCD_Initialize_Controller()
* Description:WRITE A DATA TO THE LCD controller
*********************************************************************************************************
*/
void LCD_Initialize_Controller(void)
{
/*设置文本显示起始位置*/
LCD_WriteCommand3(LCD_TXT_STP, 0x00, 0x00);
/*设置文本显示宽度*/
LCD_WriteCommand3(LCD_TXT_WID, 30, 0x00);
/*设置图形显示起始位置*/
LCD_WriteCommand3(LCD_GRH_STP, 0x00, 0x10);
/*设置图形显示宽度*/
LCD_WriteCommand3(LCD_GRH_WID, 30, 0x00);
/*光标形状设置*/
LCD_WriteCommand1(LCD_CUR_SHP|CUR_SHP_8_LINE);
/*设置模式:或显示,CGROM*/
LCD_WriteCommand1(LCD_MOD_SET|MODE_OR|MODE_CGROM);
/*设置显示开关控制:文字显示,显示图形*/
LCD_WriteCommand1(LCD_DIS_SW|DIS_SW_GRAPHIC_ON|DIS_SW_CRUSOR_ON|DIS_SW_BLINK_ON|DIS_SW_TEXT_ON);
}
/*
*********************************************************************************************************
* LED_Init()
*
* Description : Setup the I/O for the LEDs.
*
* Argument(s) : none.
*
* Return(s) : none.
*********************************************************************************************************
*/
static void LED_Init (void)
{
LED_Off(0); /* Turn OFF all the LEDs */
}
/*
*********************************************************************************************************
* LED_On()
*
* Description : Turn ON any or all the LEDs on the board.
*
* Argument(s) : led The ID of the LED to control:
*
* 0 turn ON all LEDs on the board
* 1 turn ON LCD backlight
*
* Return(s) : none.
*********************************************************************************************************
*/
void LED_On (CPU_INT08U led)
{
switch (led)
{
case 0:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -