source: azure_iot_hub_f767zi/trunk/asp_baseplatform/gdic/aqm0802_st7032/aqm0802_st7032.c@ 457

Last change on this file since 457 was 457, checked in by coas-nagasima, 4 years ago

ファイルを追加

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-csrc;charset=UTF-8
File size: 6.3 KB
Line 
1/*
2 * TOPPERS/ASP Kernel
3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Advanced Standard Profile Kernel
5 *
6 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
8 * Copyright (C) 2004-2012 by Embedded and Real-Time Systems Laboratory
9 * Graduate School of Information Science, Nagoya Univ., JAPAN
10 * Copyright (C) 2015-2019 by TOPPERS PROJECT Educational Working Group.
11 *
12 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
13 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
14 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
15 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
16 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
17 * スコード中に含まれていること.
18 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
19 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
20 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
21 * の無保証規定を掲載すること.
22 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
23 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
24 * と.
25 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
26 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
27 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
28 * 報告すること.
29 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
30 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
31 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
32 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
33 * 免責すること.
34 *
35 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
36 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
37 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
38 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
39 * の責任を負わない.
40 *
41 * $Id$
42 */
43
44/*
45 * AQM0802 ST7032 LCD制御プログラムの本体
46 */
47
48#include <kernel.h>
49#include <t_syslog.h>
50#include <t_stdlib.h>
51#include <stdio.h>
52#include <string.h>
53#include <target_syssvc.h>
54#include "syssvc/serial.h"
55#include "syssvc/syslog.h"
56#include "kernel_cfg.h"
57#include "device.h"
58#include "aqm0802_st7032.h"
59
60#define TXBUFFERSIZE 2
61
62#if defined(TOPPERS_BASE_PLATFORM_STF7)
63#define i2c_send(h, a, b, l) i2c_memwrite((h), (a), 0, 0, (b), (l), 500)
64#else
65#define i2c_send(h, a, b, l) i2c_memwrite((h), (a), 0, 0, (b), (l))
66#endif
67
68static uint8_t aTxBuffer[TXBUFFERSIZE];
69
70/*
71 * LCDの初期化
72 */
73ER
74aqm0802_init(CLCD_Handler_t *hlcd)
75{
76 I2C_Handle_t *hi2c = hlcd->hi2c;
77 ER ercd;
78
79 hlcd->max_col = 8;
80 hlcd->max_raw = 2;
81
82 /*
83 * LED COMMAND 0x38
84 */
85 aTxBuffer[0] = ST7032_CMD;
86 aTxBuffer[1] = 0x38;
87 if((ercd = i2c_send(hi2c, hlcd->saddr, aTxBuffer, TXBUFFERSIZE)) != E_OK)
88 return ercd;
89
90 // Wait 70us
91 sil_dly_nse(LCD_INTERVAL1*1000);
92 /*
93 * LCD COMMAND 0x39
94 */
95 aTxBuffer[0] = ST7032_CMD;
96 aTxBuffer[1] = 0x39;
97 if((ercd = i2c_send(hi2c, hlcd->saddr, aTxBuffer, TXBUFFERSIZE)) != E_OK)
98 return ercd;
99
100 // Wait 26.3us
101 sil_dly_nse(LCD_INTERVAL2*1000);
102 /*
103 * LCD COMMAND 0x14
104 */
105 aTxBuffer[0] = ST7032_CMD;
106 aTxBuffer[1] = 0x14;
107 if((ercd = i2c_send(hi2c, hlcd->saddr, aTxBuffer, TXBUFFERSIZE)) != E_OK)
108 return ercd;
109
110 // Wait 26.3us
111 sil_dly_nse(LCD_INTERVAL2*1000);
112 /*
113 * LCD COMMAND 0x70
114 */
115 aTxBuffer[0] = ST7032_CMD;
116 aTxBuffer[1] = 0x70;
117 if((ercd = i2c_send(hi2c, hlcd->saddr, aTxBuffer, TXBUFFERSIZE)) != E_OK)
118 return ercd;
119
120 // Wait 26.3us
121 sil_dly_nse(LCD_INTERVAL2*1000);
122 /*
123 * LCD COMMAND 0x56
124 */
125 aTxBuffer[0] = ST7032_CMD;
126 aTxBuffer[1] = 0x56;
127 if((ercd = i2c_send(hi2c, hlcd->saddr, aTxBuffer, TXBUFFERSIZE)) != E_OK)
128 return ercd;
129
130 // Wait 26.3us
131 sil_dly_nse(LCD_INTERVAL2*1000);
132 /*
133 * LCD COMMAND 0x6C
134 */
135 aTxBuffer[0] = ST7032_CMD;
136 aTxBuffer[1] = 0x6C;
137 if((ercd = i2c_send(hi2c, hlcd->saddr, aTxBuffer, TXBUFFERSIZE)) != E_OK)
138 return ercd;
139
140 // Wait 200ms
141 dly_tsk(200);
142 /*
143 * LCD COMMAND 0x38
144 */
145 aTxBuffer[0] = ST7032_CMD;
146 aTxBuffer[1] = 0x38;
147 if((ercd = i2c_send(hi2c, hlcd->saddr, aTxBuffer, TXBUFFERSIZE)) != E_OK)
148 return ercd;
149
150 // Wait 26.3us
151 sil_dly_nse(LCD_INTERVAL2*1000);
152 /*
153 * LCD COMMAND 0x0C Display ON/OFF control
154 */
155 aTxBuffer[0] = ST7032_CMD;
156 aTxBuffer[1] = 0x0C;
157 if((ercd = i2c_send(hi2c, hlcd->saddr, aTxBuffer, TXBUFFERSIZE)) != E_OK)
158 return ercd;
159
160 // Wait 26.3us
161 sil_dly_nse(LCD_INTERVAL2*1000);
162 /*
163 * LCD COMMAND 0x01 Clear Display
164 */
165 aTxBuffer[0] = ST7032_CMD;
166 aTxBuffer[1] = 0x01;
167 if((ercd = i2c_send(hi2c, hlcd->saddr, aTxBuffer, TXBUFFERSIZE)) != E_OK)
168 return ercd;
169
170 // Wait 1.08ms
171 dly_tsk(2);
172 /*
173 * LCD COMMAND 0x80
174 */
175 aTxBuffer[0] = ST7032_CMD;
176 aTxBuffer[1] = 0x80;
177 i2c_send(hi2c, hlcd->saddr, aTxBuffer, TXBUFFERSIZE);
178 return ercd;
179}
180
181/*
182 * LCDへのコマンド送信関数
183 */
184ER
185aqm0802_set_command(CLCD_Handler_t *hlcd, uint8_t c)
186{
187 aTxBuffer[0] = ST7032_CMD;
188 aTxBuffer[1] = c;
189 return i2c_send(hlcd->hi2c, hlcd->saddr, aTxBuffer, TXBUFFERSIZE);
190}
191
192/*
193 * LCDへのデータ送信関数
194 */
195ER
196aqm0802_set_data(CLCD_Handler_t *hlcd, uint8_t *p, uint8_t len)
197{
198 ER ercd = E_OK;
199 int i;
200
201 for(i = 0 ; i < len ; i++){
202 aTxBuffer[0] = ST7032_DAT;
203 aTxBuffer[1] = *p++;
204 ercd = i2c_send(hlcd->hi2c, hlcd->saddr, aTxBuffer, TXBUFFERSIZE);
205 if(ercd != E_OK)
206 break;
207 }
208 return ercd;
209}
210
Note: See TracBrowser for help on using the repository browser.