Nabend!
Probiere mich derzeit an meinem STM32F4 Discovery auf dem WaveShare
Open407V-D. Das mitgelieferte Display wird über FSMC angesprochen.
Nun geht es eigentlich um was ganz simples, ich versuche die
mitgelieferte Library zu verstehen. Wenn ich diese einbinde funktionert
diese auch ohne Probleme. Nur ich frage mich, wie bekommt die Library
die Daten auf die Pins.
Benutzt wird in der Lib die folgende Funktion um ein Register des
Displays mit Daten zu füttern:
1 | __inline void LCD_WriteReg(uint16_t LCD_Reg,uint16_t LCD_RegValue)
|
2 | {
|
3 | /* Write 16-bit Index, then Write Reg */
|
4 | LCD_WriteIndex(LCD_Reg);
|
5 | /* Write 16-bit Reg */
|
6 | LCD_WriteData(LCD_RegValue);
|
7 | }
|
Bis dahin keine Probleme, die beiden benutzen Funktionen sehen wie folgt
aus:
1 | __inline void LCD_WriteIndex(uint16_t index)
|
2 | {
|
3 | //GPIO_ResetBits(GPIOD , GPIO_Pin_7); //CS=0;
|
4 | LCD_REG = index;
|
5 | //GPIO_SetBits(GPIOD , GPIO_Pin_7); //CS=1;
|
6 | }
|
7 |
|
8 | __inline void LCD_WriteData(uint16_t data)
|
9 | {
|
10 | //GPIO_ResetBits(GPIOD , GPIO_Pin_7); //CS=0;
|
11 | LCD_RAM = data;
|
12 | //GPIO_SetBits(GPIOD , GPIO_Pin_7); //CS=1;
|
13 | }
|
Man kann sehen, dass "data" und "index" in LCD_RAM bzw. LCD_REG
geschrieben wird. Beide sind wie folgt definiert:
1 | #define LCD_REG (*((volatile unsigned short *) 0x60 00 00 00)) /* RS = 0 */
|
2 | #define LCD_RAM (*((volatile unsigned short *) 0x60 02 00 00)) /* RS = 1 */
|
In der Definition muss die Info stecken wie ich die Daten auf die Pins
mit FSMC bekomme. Entweder ich sehe die Lösung vor lauter Datenblättern
kaum oder ich bin zu doof dafür.
Kann mir jemand den Zusammenhang erklären?
Ich werde die .c und .h mal anhängen. In der LCD.h erwähnten "config.h"
ist nichts brauchbares zu finden.
Vielen Dank schonmal!