Hallo Allerseits,
hab einen kleines Projekt gestartet bestehend aus ein Demo Board
angebunden an einem Grafischen Display. Das Demo Board(SmartRF 04) ist
von Chipcon(jetzt TI), die ist bestückt mit einem cc2510 MCU, dieser
kommuniziert über SPI mit einem GLCD. Als Treiner dient ein NT7534.
In den Foren ware ich fündig gewesen. GLCD Treiber wie die von ST sind
weit verbreitet relativ zu Novatek, sind aber weitestenhend kompatible.
Die SPI Anbindung funktioniert einwandfrei, was mein Logic analyser es
auch zeigt. Die Initialisierungsroutine zum Display steht im folgenden
Quellcode:
1 | #include <hal_types.h>
|
2 | #include <hal_defs.h>
|
3 | #include <hal_cc8051.h>
|
4 | #include <ioCCxx10_bitdef.h>
|
5 | #include <ioCC2510.h>
|
6 | #include "SpiToNovatek.h"
|
7 |
|
8 | #define SI P1_6
|
9 | #define CLK P1_5
|
10 | #define RES P0_0
|
11 | #define A0 P1_3
|
12 | #define CS P1_4
|
13 | #define LOW 0
|
14 | #define HIGH 1
|
15 |
|
16 | void SpiWriteData(uint8 Data){
|
17 | A0 = HIGH;
|
18 | asm("NOP");
|
19 | CS = LOW;
|
20 | asm("NOP");asm("NOP");asm("NOP");asm("NOP");
|
21 | U1DBUF = Data;
|
22 | while(!(U1CSR & U1CSR_TX_BYTE));
|
23 | U1CSR &= ~U1CSR_TX_BYTE;
|
24 | asm("NOP");asm("NOP");asm("NOP");asm("NOP");
|
25 | CS = HIGH;
|
26 | A0 = LOW;
|
27 | }
|
28 |
|
29 | void SpiWriteCmd(uint8 cmd){
|
30 | A0 = LOW;
|
31 | asm("NOP");
|
32 | CS = LOW;
|
33 | asm("NOP");asm("NOP");asm("NOP");asm("NOP");
|
34 | U1DBUF = cmd;
|
35 | while(!(U1CSR & U1CSR_TX_BYTE));
|
36 | U1CSR &= ~U1CSR_TX_BYTE;
|
37 | asm("NOP");asm("NOP");asm("NOP");asm("NOP");
|
38 | A0 = HIGH;
|
39 | CS = HIGH;
|
40 | }
|
41 |
|
42 | void delay(void){
|
43 | for (unsigned int i=0; i<10000; i++)
|
44 | {
|
45 | asm("NOP");
|
46 | }
|
47 | }
|
48 |
|
49 | void Init_LCD(void){
|
50 | RES = LOW;
|
51 | delay(); // delay min 20us
|
52 | RES = HIGH;
|
53 | asm("NOP");asm("NOP"); // delay Max 1us
|
54 | CS = LOW;
|
55 | SpiWriteCmd(0xA2); // 11 - Set bias 1/9 (Duty 1/65)
|
56 | SpiWriteCmd(0xA1); // 8 - ADC reverse
|
57 | SpiWriteCmd(0xC0); // 15 - Normal COM0~COM63
|
58 | SpiWriteCmd(0x2F); // Booster, Regulator and Follower on
|
59 | SpiWriteCmd(0x00);
|
60 | SpiWriteCmd(0x27); // 17 - Contrast set
|
61 | SpiWriteCmd(0x81); // 18 - xxx
|
62 | SpiWriteCmd(0xA7); // A6 Display normal // A7 invertiert
|
63 | SpiWriteCmd(0xA5); // All point are ON
|
64 | SpiWriteCmd(0x40); // Display start line (Start line 0)
|
65 | SpiWriteCmd(0xAF); // Display on
|
66 | }
|
67 |
|
68 | void SpiInit(void){
|
69 | SLEEP &= ~SLEEP_OSC_PD;
|
70 | while( !(SLEEP & SLEEP_XOSC_S) );
|
71 | CLKCON = (CLKCON & ~(CLKCON_CLKSPD | CLKCON_OSC)) | CLKSPD_DIV_1;
|
72 | while (CLKCON & CLKCON_OSC);
|
73 | SLEEP |= SLEEP_OSC_PD;
|
74 | // Master Mode
|
75 | PERCFG |= 0x02; // PERCFG.U1CFG = 1
|
76 | P1SEL |= BIT6 | BIT5; // SI and clk are peripherals
|
77 | P1SEL &= ~(BIT4 | BIT3); // CS and Res are set as GPIO
|
78 | P1DIR |= BIT4 | BIT3; // output
|
79 | P0SEL |= ~BIT0; // A0 is as GPIO
|
80 | P0DIR |= BIT0; // output
|
81 | A0 = HIGH;
|
82 | RES = HIGH;
|
83 | CS = HIGH;
|
84 |
|
85 | U1BAUD = 0x00; // BAUD_M = 0
|
86 | U1GCR |= 0x11; // BAUD_E = 17
|
87 | U1CSR &= ~0xA0;
|
88 | U1GCR &= ~0x80; // SPI CPOL
|
89 | U1GCR &= ~0x40; // SPI CPHA
|
90 | U1GCR |= 0x20; // SPI ORDER
|
91 | }
|
92 |
|
93 | int main(void)
|
94 | {
|
95 | SpiInit();
|
96 | Init_LCD();
|
97 | return 0;
|
98 | }
|
Bis jetzt konnte ich am Display nichts angezeigt, auch die Invertierung
mittles
hat nichts gewirkt. Villeicht habe ich doch was übersehen!!
Für euren Feedbak freue ich mich ;)