Previous: 2.3.4.2. 読み込み用関数 |
Up: 2.3.4. 実験のためのサンプルプログラム |
Next: 2.3.4.4. 初期化処理 |
LCDモジュールへの書き込み用にLCD_Write_Init_Inst関数、LCD_Write_Inst関数、
LCD_Write_Data関数を用意しました。読み込み処理と同じく、書き込みの中心部分の処理は同じなので、LCD_Write_Core関数としてまとめています。命令書き込み用の関数としてLCD_Write_Init_Inst関数とLCD_Write_Inst関数を用意しているのは、初期化処理の最初の段階ではビジーフラグのチェックが行えないので、チェックする関数(LCD_Write_Inst関数)とチェックをしない関数(LCD_Write_Init_Inst関数)に分けたためです。これらの関数を実行することにより命令・データをLCDモジュールに送信できます。
/** ? * @brief? Writing instruction without busy flag check ? * @param? WriteData: Data to be written ? * @retval : None ? */ void LCD_Write_Init_Inst(uint8_t WriteData) { ? //RS=0: Instruction ? GPIO_ResetBits(GPIOY_0_PORT, GPIOY_0_PIN);
? LCD_Write_Core(WriteData); }
/** ? * @brief? Writing instruction with busy flag check ? * @param? WriteData: Data to be written ? * @retval : None ? */ void LCD_Write_Inst(uint8_t WriteData) {
? while( LCD_Read_Inst() & 0b10000000); ? //RS=0: Instruction ? GPIO_ResetBits(GPIOY_0_PORT, GPIOY_0_PIN);
? LCD_Write_Core(WriteData); }
/** ? * @brief? Writing data ? * @param? WriteData: Data to be written ? * @retval : None ? */ void LCD_Write_Data(uint8_t WriteData) {
? while(LCD_Read_Inst() & 0b10000000); ? //RS=1: Data ? GPIO_SetBits(GPIOY_0_PORT, GPIOY_0_PIN);
? LCD_Write_Core(WriteData); } |
これらの関数の中、
while(LCD_Read_Inst() & 0b10000000); |
がビジーフラグのチェック部分です。LCD_Read_Inst関数の戻り値に0b10000000にAND演算するとビジーフラグ部分のみが残ります。結果ビジーフラグが立っている間だけ待つという処理を行ったことになります。
書き込み処理もコントローラの既定のタイミングで処理を行っています。ただGPIOからのデータ出力は、RWのLレベルにした後、EをHレベルにする前に行っています。これはLCDモジュールが読み込みを行うよりも確実に前にデータを出力しておきたいためです。
/** ? * @brief? Writing process common in instruction and data ? * @param? WriteData: Data to be written ? * @retval : None ? */ void LCD_Write_Core(uint8_t WriteData) { ? //RW=0: Write (Output to LCD) ? GPIO_ResetBits(GPIOY_1_PORT, GPIOY_1_PIN); ? //Wait: Setup time: tAS(40) : 40ns : 3 clocks ? WAIT_3_CLOCK; ? //Set GPIO as output ? GPIO_Out_Configuration(); ? //Output Data ? GPIO_Write(GPIOX_PORT, (GPIO_ReadOutputData(GPIOX_PORT) & 0xFF00) | (uint16_t)WriteData); ? //E=1: Enable ? GPIO_SetBits(GPIOY_2_PORT, GPIOY_2_PIN); ? //Wait: Pulse time and holdtime: PWEH(220) + tH(10) : 230ns : 18 clocks ? WAIT_18_CLOCK; ? //E=0: Disable ? GPIO_ResetBits(GPIOY_2_PORT, GPIOY_2_PIN); ? //Wait: tC(500) - PWEH(220) - tH(10) - tAS(40) : 230ns : 18 clocks ? WAIT_18_CLOCK; } |
Previous: 2.3.4.2. 読み込み用関数 |
Up: 2.3.4. 実験のためのサンプルプログラム |
Next: 2.3.4.4. 初期化処理 |