BLE-CC254x-1.4.2.2之LCD分析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Life_Maze/article/details/80026500

INT_HEAP_LEN=3072
HALNODEBUG
OSAL_CBTIMER_NUM_TASKS=1
HAL_AES_DMA=TRUE
HAL_DMA=TRUE
POWER_SAVING
xPLUS_BROADCASTER
HAL_LCD=TRUE
HAL_LED=FALSE
HAL_KEY=TRUE

--------------------------------------------------------------------------------------LCD初始化

main(void) ==>HalDriverInit();  ==>HalDriverInit (void) ===> HalLcdInit()===>HalLcd_HW_Init(void):

--------------------------------------------------------------------------------------hal_lcd.h

/*常量*/

#define HAL_LCD_LINE_1      0x01

#define HAL_LCD_LINE_2      0x02
#define HAL_LCD_LINE_3      0x03
#define HAL_LCD_LINE_4      0x04
#define HAL_LCD_LINE_5      0x05
#define HAL_LCD_LINE_6      0x06
#define HAL_LCD_LINE_7      0x07

#define HAL_LCD_LINE_8      0x08

/*函数 - API*/

extern void HalLcdInit(void);// 初始化液晶服务
extern void HalLcdWriteString ( char *str, uint8 option);//在LCD上写入一个字符串。
extern void HalLcdWriteValue ( uint32 value, const uint8 radix, uint8 option);//为LCD写一个值。
extern void HalLcdWriteScreen( char *line1, char *line2 );//为LCD写一个值。
extern void HalLcdWriteStringValue( char *title, uint16 value, uint8 format, uint8 line );//写一个字符串后跟一个值到LCD。
extern void HalLcdWriteStringValueValue( char *title, uint16 value1, uint8 format1, uint16 value2, uint8 format2, uint8 line );//编写一个字符串后跟两个值到LCD。
extern void HalLcdDisplayPercentBar( char *title, uint8 value );//在液晶屏上写一个百分比栏。

--------------------------------------------------------------------------------------hal_lcd.c

/* LCD Max Chars and Buffer */
#define HAL_LCD_MAX_CHARS   16
#define HAL_LCD_MAX_BUFF    25
/* LCD 控制线设置 */
#define HAL_LCD_MODE_PORT 0    //  control-  P0.0 - LCD_MODE
#define HAL_LCD_MODE_PIN  0 
#define HAL_LCD_RESET_PORT 1     //  control-  P1.1 - LCD_FLASH_RESET
#define HAL_LCD_RESET_PIN  1
#define HAL_LCD_CS_PORT 1          //  control-  P1.2 - LCD_CS
#define HAL_LCD_CS_PIN  2

/* LCD SPI 线设置 */


#define HAL_LCD_CLK_PORT 1     //  spi-   P1.5 - CLK
#define HAL_LCD_CLK_PIN  5
#define HAL_LCD_MOSI_PORT 1   //  spi-   P1.6 - MOSI
#define HAL_LCD_MOSI_PIN  6
#define HAL_LCD_MISO_PORT 1   //  spi-   P1.7 - MISO

#define HAL_LCD_MISO_PIN  7

/* SPI settings */
#define HAL_SPI_CLOCK_POL_LO      0x00         //极性
#define HAL_SPI_CLOCK_PHA_0        0x00          //相位
#define HAL_SPI_TRANSFER_MSB_FIRST 0x20   //MSB优先
/* LCD lines */

#define LCD_MAX_LINE_COUNT              3       // 显示行数

#define SET_POWER_SAVE_MODE(options)    HalLcd_HW_Control(0x0C | (options))  //Set power save mode

#define FUNCTION_SET(options)           HalLcd_HW_Control(0x10 | (options))  // Function Set 

#define SET_DISPLAY_START_LINE(line)    HalLcd_HW_Control(0x18 | (line))  //Set Display Start Line

#define SET_BIAS_CTRL(bias)             HalLcd_HW_Control(0x1C | (bias))  //Bias control

#define SET_POWER_CTRL(options)         HalLcd_HW_Control(0x20 | (options)) //Power control

#define SET_DISPLAY_CTRL(options)       HalLcd_HW_Control(0x28 | (options))  //Set display control

#define SET_DDRAM_ADDR(charIndex)       HalLcd_HW_Control(0x80 | (charIndex)) //Set DD address

#define SET_GCRAM_CHAR(specIndex)       HalLcd_HW_Control(0xC0 | (specIndex)) //Set CGRAM address

#define SET_ICONRAM_ADDR(addr)          HalLcd_HW_Control(0x40 | (addr))  //Set ICONRAM address

#define SET_DOUBLE_HEIGHT(options)      HalLcd_HW_Control(0x08 | (options)) //Set double height

/* SPI interface control */

#define LCD_SPI_BEGIN()   // spi  chip select 使能

#define LCD_SPI_END()     //spi  chip select 失能

//清除接收和发送的字节状态,将tx数据写入缓冲区,等待发送完成

#define LCD_SPI_TX(x) 

#define LCD_SPI_WAIT_RXRDY()

/* Control macros */

#define LCD_DO_WRITE()        HAL_IO_SET(HAL_LCD_MODE_PORT,  HAL_LCD_MODE_PIN,  1);
#define LCD_DO_CONTROL()      HAL_IO_SET(HAL_LCD_MODE_PORT,  HAL_LCD_MODE_PIN,  0);
#define LCD_ACTIVATE_RESET()  HAL_IO_SET(HAL_LCD_RESET_PORT, HAL_LCD_RESET_PIN, 0);

#define LCD_RELEASE_RESET()   HAL_IO_SET(HAL_LCD_RESET_PORT, HAL_LCD_RESET_PIN, 1);

/*  FUNCTIONS - API*/

void HalLcd_HW_Init(void);   // 液晶驱动初始化
void HalLcd_HW_WaitUs(uint16 i); // ms延时
void HalLcd_HW_Clear(void);  //LCD清屏,写空格
void HalLcd_HW_ClearAllSpecChars(void);  //清除所有特殊字符
void HalLcd_HW_Control(uint8 cmd);//将1个命令写入LCD
void HalLcd_HW_Write(uint8 data);//将1个数据写入LCD
void HalLcd_HW_SetContrast(uint8 value); //设置显示的对比
void HalLcd_HW_WriteChar(uint8 line, uint8 col, char text); //将一个字符写入显示。
void HalLcd_HW_WriteLine(uint8 line, const char *pText);//在显示器上写一行。

--------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------

void SimpleBLEPeripheral_Init( uint8 task_id )

{

    。。。。

#if (defined HAL_LCD) && (HAL_LCD == TRUE)
#if defined FEATURE_OAD //若打开了OAD功能
  #if defined (HAL_IMAGE_A)
    HalLcdWriteStringValue( "BLE Peri-A", OAD_VER_NUM( _imgHdr.ver ), 16, HAL_LCD_LINE_1 );
  #else
    HalLcdWriteStringValue( "BLE Peri-B", OAD_VER_NUM( _imgHdr.ver ), 16, HAL_LCD_LINE_1 );
  #endif // HAL_IMAGE_A
#else
  HalLcdWriteString( "BLE Peripheral", HAL_LCD_LINE_1 );
#endif // FEATURE_OAD
#endif // (defined HAL_LCD) && (HAL_LCD == TRUE)

    。。。。

}

--------------------------------------------------------------------------------------HalLcd_HW_Init()解析

void HalLcd_HW_Init(void)
{
  /* Initialize LCD IO lines */
  halLcd_ConfigIO();
  /* Initialize SPI */
  halLcd_ConfigSPI();
  /* 执行重置 */
  LCD_ACTIVATE_RESET();
  HalLcd_HW_WaitUs(15000); // 15 ms
  LCD_RELEASE_RESET();
  HalLcd_HW_WaitUs(15); // 15 us
  /* 执行初始化序列 */
  FUNCTION_SET(CGRAM | COM_FORWARD | THREE_LINE);
  /*设置对比度*/
  HalLcd_HW_SetContrast(15);
  /* 设置电源 */
  SET_POWER_SAVE_MODE(OSC_OFF | POWER_SAVE_ON);
  SET_POWER_CTRL(VOLTAGE_DIVIDER_ON | CONVERTER_AND_REG_ON);
  SET_BIAS_CTRL(BIAS_1_5);
  HalLcd_HW_WaitUs(21000);// 21 ms
  /* 清屏 */
  HalLcd_HW_Clear();
  HalLcd_HW_ClearAllSpecChars();
  SET_DISPLAY_CTRL(DISPLAY_CTRL_ON | DISPLAY_CTRL_BLINK_OFF | DISPLAY_CTRL_CURSOR_OFF);

}

static void halLcd_ConfigIO(void)
{
  /* GPIO configuration */
  HAL_CONFIG_IO_OUTPUT(HAL_LCD_MODE_PORT,  HAL_LCD_MODE_PIN,  1);//选择 lCD的模式
  HAL_CONFIG_IO_OUTPUT(HAL_LCD_RESET_PORT, HAL_LCD_RESET_PIN, 1); //LCD复位
  HAL_CONFIG_IO_OUTPUT(HAL_LCD_CS_PORT,    HAL_LCD_CS_PIN,    1);  //LCD片选
}

static void halLcd_ConfigSPI(void)
{
  /* UART/SPI 外设配置 */
   uint8 baud_exponent;
   uint8 baud_mantissa;
  /* Set UART 1上的SPI 为 位置2 */
  PERCFG |= 0x02;
  /* 配置时钟线, 主机输出、主机输出线*/
  HAL_CONFIG_IO_PERIPHERAL(HAL_LCD_CLK_PORT,  HAL_LCD_CLK_PIN);
  HAL_CONFIG_IO_PERIPHERAL(HAL_LCD_MOSI_PORT, HAL_LCD_MOSI_PIN);
  HAL_CONFIG_IO_PERIPHERAL(HAL_LCD_MISO_PORT, HAL_LCD_MISO_PIN);
  /*将SPI速度设置为1MHz(值假设系统clk为32MHz),确认在1MHz SPI clk中。*/
  baud_exponent = 15;
  baud_mantissa =  0;
  /*配置SPI */
  U1UCR  = 0x80;      /* 刷新并进入空闲状态。8 - n - 1。 */
  U1CSR  = 0x00;      /* 设置SPI 模式为  主机*/
  U1GCR  = HAL_SPI_TRANSFER_MSB_FIRST | HAL_SPI_CLOCK_PHA_0 | HAL_SPI_CLOCK_POL_LO | baud_exponent;
  U1BAUD = baud_mantissa;
}

猜你喜欢

转载自blog.csdn.net/Life_Maze/article/details/80026500