902aa402b3830b9c9aa26758390b6eb93b42a0f5
Stefan Schuermans added file headers

Stefan Schuermans authored 12 years ago

1) /* MIPS I system
Stefan Schuermans replace email address in he...

Stefan Schuermans authored 12 years ago

2)  * Copyright 2011-2012 Stefan Schuermans <stefan@blinkenarea.org>
Stefan Schuermans added file headers

Stefan Schuermans authored 12 years ago

3)  * Copyleft GNU public license V2 or later
4)  *          http://www.gnu.org/copyleft/gpl.html
5)  */
6) 
Stefan Schuermans implemented LCD peripheral

Stefan Schuermans authored 12 years ago

7) #include "cyc_cnt.h"
8) #include "lcd.h"
9) 
Stefan Schuermans converted code to use const...

Stefan Schuermans authored 12 years ago

10) static volatile unsigned char *const lcd_ptr =
11)   (volatile unsigned char *)0x80000100;
12) 
Stefan Schuermans implemented LCD peripheral

Stefan Schuermans authored 12 years ago

13) /**
14)  * @brief set data to LCD
15)  * @param[in] data data to LCD
16)  */
17) void lcd_set_data(unsigned char data)
18) {
Stefan Schuermans converted code to use const...

Stefan Schuermans authored 12 years ago

19)   lcd_ptr[0] = data;
Stefan Schuermans implemented LCD peripheral

Stefan Schuermans authored 12 years ago

20) }
21) 
22) /**
23)  * @brief set enable signal to LCD
24)  * @param[in] state state for enable signal (0 or 1)
25)  */
26) void lcd_set_e(unsigned char state)
27) {
Stefan Schuermans converted code to use const...

Stefan Schuermans authored 12 years ago

28)   lcd_ptr[1] = state;
Stefan Schuermans implemented LCD peripheral

Stefan Schuermans authored 12 years ago

29) }
30) 
31) /**
32)  * @brief set register select signal to LCD
33)  * @param[in] state state for register select signal (0 or 1)
34)  */
35) void lcd_set_rs(unsigned char state)
36) {
Stefan Schuermans converted code to use const...

Stefan Schuermans authored 12 years ago

37)   lcd_ptr[2] = state;
Stefan Schuermans implemented LCD peripheral

Stefan Schuermans authored 12 years ago

38) }
39) 
40) /**
41)  * @brief set read/write signal to LCD
42)  * @param[in] state state for read/write signal (0 or 1)
43)  */
44) void lcd_set_rw(unsigned char state)
45) {
Stefan Schuermans converted code to use const...

Stefan Schuermans authored 12 years ago

46)   lcd_ptr[3] = state;
Stefan Schuermans implemented LCD peripheral

Stefan Schuermans authored 12 years ago

47) }
48) 
49) /** set LCD to 4 bit mode */
50) void lcd_set4bit(void)
51) {
52)   lcd_set_data(0x0F);
53)   lcd_set_e(0);
54)   lcd_set_rs(0);
55)   lcd_set_rw(0);
Stefan Schuermans improve 200ms tick and task...

Stefan Schuermans authored 12 years ago

56)   cyc_cnt_delay(15 * CYC_CNT_MS);
Stefan Schuermans implemented LCD peripheral

Stefan Schuermans authored 12 years ago

57)   lcd_set_data(0x3F);
58)   lcd_set_e(1);
59)   cyc_cnt_delay(12);
60)   lcd_set_e(0);
Stefan Schuermans improve 200ms tick and task...

Stefan Schuermans authored 12 years ago

61)   cyc_cnt_delay(4100 * CYC_CNT_US);
Stefan Schuermans implemented LCD peripheral

Stefan Schuermans authored 12 years ago

62)   lcd_set_e(1);
63)   cyc_cnt_delay(12);
64)   lcd_set_e(0);
Stefan Schuermans improve 200ms tick and task...

Stefan Schuermans authored 12 years ago

65)   cyc_cnt_delay(100 * CYC_CNT_US);
Stefan Schuermans implemented LCD peripheral

Stefan Schuermans authored 12 years ago

66)   lcd_set_e(1);
67)   cyc_cnt_delay(12);
68)   lcd_set_e(0);
Stefan Schuermans improve 200ms tick and task...

Stefan Schuermans authored 12 years ago

69)   cyc_cnt_delay(40 * CYC_CNT_US);
Stefan Schuermans implemented LCD peripheral

Stefan Schuermans authored 12 years ago

70)   lcd_set_data(0x2F);
71)   lcd_set_e(1);
72)   cyc_cnt_delay(12);
73)   lcd_set_e(0);
Stefan Schuermans improve 200ms tick and task...

Stefan Schuermans authored 12 years ago

74)   cyc_cnt_delay(40 * CYC_CNT_US);
Stefan Schuermans implemented LCD peripheral

Stefan Schuermans authored 12 years ago

75) }
76) 
77) /**
78)  * @brief output a byte to LCD
79)  * @param[in] data if the byte is a data byte (command otherwise)
80)  * @param[in] byte byte to write
81)  */
82) void lcd_byte(unsigned char data, unsigned char byte)
83) {
84)   lcd_set_e(0);
85)   lcd_set_rs(data ? 1: 0);
86)   lcd_set_rw(0);
87)   lcd_set_data(byte | 0x0F);
88)   lcd_set_e(1);
89)   cyc_cnt_delay(12);
90)   lcd_set_e(0);
Stefan Schuermans improve 200ms tick and task...

Stefan Schuermans authored 12 years ago

91)   cyc_cnt_delay(1 * CYC_CNT_US);
Stefan Schuermans implemented LCD peripheral

Stefan Schuermans authored 12 years ago

92)   lcd_set_data(byte << 4 | 0x0F);
93)   lcd_set_e(1);
94)   cyc_cnt_delay(12);
95)   lcd_set_e(0);
Stefan Schuermans improve 200ms tick and task...

Stefan Schuermans authored 12 years ago

96)   cyc_cnt_delay(40 * CYC_CNT_US);
Stefan Schuermans implemented LCD peripheral

Stefan Schuermans authored 12 years ago

97) }
98) 
99) /** initialize LCD */
100) void lcd_init(void)
101) {
102)   lcd_set4bit();
103)   lcd_byte(0, 0x28);
104)   lcd_byte(0, 0x06);
105)   lcd_byte(0, 0x0C);
106)   lcd_byte(0, 0x01);
Stefan Schuermans improve 200ms tick and task...

Stefan Schuermans authored 12 years ago

107)   cyc_cnt_delay(1640 * CYC_CNT_US);
Stefan Schuermans output character/string to LCD

Stefan Schuermans authored 12 years ago

108) }
109) 
110) /**
111)  * @brief show character
112)  * @param[in] line number of line (0..1)
113)  * @param[in] pos position in line (0..15)
114)  * @param[in] chr character to set
115)  */
116) void lcd_chr(unsigned int line, unsigned int pos, char chr)
117) {
118)   if (line > 1 || pos > 15)
119)     return;
120)   lcd_byte(0, 0x80 | line << 6 | pos);
121)   lcd_byte(1, chr);
122) }
123) 
124) /**
125)  * @brief show string
126)  * @param[in] line number of line (0..1)
127)  * @param[in] str string to show
128)  */
129) void lcd_str(unsigned int line, const char *str)
130) {
131)   if (line > 1)
132)     return;
133)   lcd_byte(0, 0x80 | line << 6);
134)   unsigned int cnt;
135)   for (cnt = 0; cnt < 16 && str[cnt] != 0; ++cnt)
136)     lcd_byte(1, str[cnt]);
137)   for (; cnt < 16; ++cnt)
138)     lcd_byte(1, ' ');