1 /****************************************************************************************************************************************** 2 * 文件名称: SWM320_lcd.c 3 * 功能说明: SWM320单片机的LCD功能驱动库 4 * 技术支持: http://www.synwit.com.cn/e/tool/gbook/?bid=1 5 * 注意事项: 6 * 版本日期: V1.1.0 2017年10月25日 7 * 升级记录: 8 * 9 * 10 ******************************************************************************************************************************************* 11 * @attention 12 * 13 * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS WITH CODING INFORMATION 14 * REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. AS A RESULT, SYNWIT SHALL NOT BE HELD LIABLE 15 * FOR ANY DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT 16 * OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION CONTAINED HEREIN IN CONN- 17 * -ECTION WITH THEIR PRODUCTS. 18 * 19 * COPYRIGHT 2012 Synwit Technology 20 *******************************************************************************************************************************************/ 21 #include "SWM320.h" 22 #include "SWM320_lcd.h" 23 24 #include <string.h> 25 26 /****************************************************************************************************************************************** 27 * 函数名称: LCD_Init() 28 * 功能说明: LCD初始化 29 * 输 入: LCD_TypeDef * LCDx 指定要被设置的LCD,有效值包括LCD 30 * LCD_InitStructure * initStruct 包含LCD相关设定值的结构体 31 * 输 出: 无 32 * 注意事项: 无 33 ******************************************************************************************************************************************/ LCD_Init(LCD_TypeDef * LCDx,LCD_InitStructure * initStruct)34void LCD_Init(LCD_TypeDef * LCDx, LCD_InitStructure * initStruct) 35 { 36 switch((uint32_t)LCDx) 37 { 38 case ((uint32_t)LCD): 39 SYS->CLKEN |= (0x01 << SYS_CLKEN_LCD_Pos); 40 break; 41 } 42 43 LCDx->CR0 = ((initStruct->HnPixel - 1) << LCD_CR0_HPIX_Pos) | 44 ((initStruct->VnPixel - 1) << LCD_CR0_VPIX_Pos) | 45 (initStruct->ClkAlways << LCD_CR0_DCLK_Pos) | 46 (initStruct->HsyncWidth << LCD_CR0_HLOW_Pos); 47 48 LCDx->CR1 = ((initStruct->Hfp - 1) << LCD_CR1_HFP_Pos) | 49 ((initStruct->Hbp - 1) << LCD_CR1_HBP_Pos) | 50 ((initStruct->Vfp - 1) << LCD_CR1_VFP_Pos) | 51 ((initStruct->Vbp - 1) << LCD_CR1_VBP_Pos) | 52 (initStruct->ClkDiv << LCD_CR1_DCLKDIV_Pos) | 53 (initStruct->SamplEdge << LCD_CR1_DCLKINV_Pos); 54 55 LCDx->IE = 1; 56 LCDx->IF = 1; //清除标志 57 if(initStruct->IntEOTEn) LCD_INTEn(LCDx); 58 else LCD_INTDis(LCDx); 59 60 switch((uint32_t)LCDx) 61 { 62 case ((uint32_t)LCD): 63 if(initStruct->IntEOTEn) 64 { 65 NVIC_EnableIRQ(LCD_IRQn); 66 } 67 else 68 { 69 NVIC_DisableIRQ(LCD_IRQn); 70 } 71 break; 72 } 73 } 74 75 /****************************************************************************************************************************************** 76 * 函数名称: LCD_Start() 77 * 功能说明: 启动一次数据传输 78 * 输 入: LCD_TypeDef * LCDx 指定要被设置的LCD,有效值包括LCD 79 * 输 出: 无 80 * 注意事项: 无 81 ******************************************************************************************************************************************/ LCD_Start(LCD_TypeDef * LCDx)82void LCD_Start(LCD_TypeDef * LCDx) 83 { 84 LCDx->START |= (1 << LCD_START_GO_Pos) | (1 << LCD_START_BURST_Pos); 85 } 86 87 /****************************************************************************************************************************************** 88 * 函数名称: LCD_IsBusy() 89 * 功能说明: 是否正在进行数据传输 90 * 输 入: LCD_TypeDef * LCDx 指定要被设置的LCD,有效值包括LCD 91 * 输 出: uint32_t 1 正在传输数据 0 数据传输已完成 92 * 注意事项: 无 93 ******************************************************************************************************************************************/ LCD_IsBusy(LCD_TypeDef * LCDx)94uint32_t LCD_IsBusy(LCD_TypeDef * LCDx) 95 { 96 return (LCDx->START & LCD_START_GO_Msk) ? 1 : 0; 97 } 98 99 /****************************************************************************************************************************************** 100 * 函数名称: LCD_INTEn() 101 * 功能说明: LCD中断使能,完成指定长度的数据传输时触发中断 102 * 输 入: LCD_TypeDef * LCDx 指定要被设置的LCD,有效值包括LCD 103 * 输 出: 无 104 * 注意事项: 无 105 ******************************************************************************************************************************************/ LCD_INTEn(LCD_TypeDef * LCDx)106void LCD_INTEn(LCD_TypeDef * LCDx) 107 { 108 LCDx->IM = 0; 109 } 110 111 /****************************************************************************************************************************************** 112 * 函数名称: LCD_INTDis() 113 * 功能说明: LCD中断禁止,完成指定长度的数据传输时不触发中断 114 * 输 入: LCD_TypeDef * LCDx 指定要被设置的LCD,有效值包括LCD 115 * 输 出: 无 116 * 注意事项: 无 117 ******************************************************************************************************************************************/ LCD_INTDis(LCD_TypeDef * LCDx)118void LCD_INTDis(LCD_TypeDef * LCDx) 119 { 120 LCDx->IM = 1; 121 } 122 123 /****************************************************************************************************************************************** 124 * 函数名称: LCD_INTClr() 125 * 功能说明: LCD中断标志清除 126 * 输 入: LCD_TypeDef * LCDx 指定要被设置的LCD,有效值包括LCD 127 * 输 出: 无 128 * 注意事项: 无 129 ******************************************************************************************************************************************/ LCD_INTClr(LCD_TypeDef * LCDx)130void LCD_INTClr(LCD_TypeDef * LCDx) 131 { 132 LCDx->IF = 1; 133 } 134 135 /****************************************************************************************************************************************** 136 * 函数名称: LCD_INTStat() 137 * 功能说明: LCD中断状态查询 138 * 输 入: LCD_TypeDef * LCDx 指定要被设置的LCD,有效值包括LCD 139 * 输 出: uint32_t 1 完成指定长度的数据传输 0 未完成指定长度的数据传输 140 * 注意事项: 无 141 ******************************************************************************************************************************************/ LCD_INTStat(LCD_TypeDef * LCDx)142uint32_t LCD_INTStat(LCD_TypeDef * LCDx) 143 { 144 return (LCDx->IF & 0x01) ? 1 : 0; 145 } 146