From def8902c1681a94ccb70d90cc855aedbc6a9e918 Mon Sep 17 00:00:00 2001
From: hackbard <hackbard@staubsauger.localdomain>
Date: Tue, 4 Sep 2007 03:35:29 +0200
Subject: [PATCH] display backlight fun ..., display init (not working!), spi1
 stuff for cc1100

---
 betty/betty.c | 125 ++++++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 122 insertions(+), 3 deletions(-)

diff --git a/betty/betty.c b/betty/betty.c
index f3e08ce..81b4687 100644
--- a/betty/betty.c
+++ b/betty/betty.c
@@ -17,6 +17,7 @@
 
 /* bank 0/2 and boootloader addr/size */
 #define BANK0			0x80000000
+#define BANK1			0x81000000
 #define BANK2			0x82000000
 #define BANK_SIZE		0x00100000
 #define BOOTLOADER		0x7fffe000
@@ -30,6 +31,10 @@
 #define B2F2AA	(*((volatile unsigned short *)(BANK2|0x554)))	// 0x2aa
 #define B2F	(*((volatile unsigned short *)(BANK2)))
 
+/* lcd command and data addresses */
+#define LCD_CMD		(*((volatile unsigned char *)(BANK1)))
+#define LCD_DATA	(*((volatile unsigned char *)(BANK1+1)))
+
 /*
  * type definitions
  */
@@ -166,6 +171,117 @@ u8 uart0_get_byte(void) {
 	return rx;
 }
 
+void pause(int cnt) {
+
+	while(cnt--)
+		asm volatile ("nop");
+}
+	
+void init_lcd(u8 s) {
+
+	LCD_CMD=0xe1;	// ?
+	LCD_CMD=0xe2;
+	pause(48000);
+	LCD_CMD=0xab;
+	LCD_CMD=0x27;
+	LCD_CMD=0x81;
+	LCD_CMD=0x3f;
+	LCD_CMD=0x65;
+	LCD_CMD=0x60;
+	LCD_CMD=0x1c;
+	LCD_CMD=0x61;
+	LCD_CMD=0x0a;
+	LCD_CMD=0x62;
+	LCD_CMD=0x75;
+	LCD_CMD=0x63;
+	LCD_CMD=0x81;
+	LCD_CMD=0x90;
+	LCD_CMD=0x88;
+	LCD_CMD=0x00;
+	LCD_CMD=0x89;
+	LCD_CMD=0x00;
+	LCD_CMD=0x8a;
+	LCD_CMD=0x33;
+	LCD_CMD=0x8b;
+	LCD_CMD=0x33;
+	LCD_CMD=0x8c;
+	LCD_CMD=0x66;
+	LCD_CMD=0x8d;
+	LCD_CMD=0x66;
+	LCD_CMD=0x8e;
+	LCD_CMD=0x99;
+	LCD_CMD=0x8f;
+	LCD_CMD=0x99;
+	if(s) {
+		LCD_CMD=0xa1;
+		LCD_CMD=0xc0;
+	}
+	else {
+		LCD_CMD=0xa0;
+		LCD_CMD=0xc8;
+	}
+	LCD_CMD=0x2e;
+	pause(48000);
+	LCD_CMD=0x2f;
+	LCD_CMD=0xa4;
+	LCD_CMD=0xa6;
+}
+
+/*
+ * spi0 stuff (+ cc1100)
+ */
+
+#define SLAVE	0
+#define MASTER	1
+
+void spi1_init(u8 width,u8 type,u8 div) {
+
+	if((width<8)|(width>16))
+		width=8;
+	if(width==16)
+		width=0;
+
+	div&=0xfe;
+	if(div<8)
+		div=8;
+
+	S1SPCR=(1<<2)|(width<<8)|(type<<5);
+	S1SPCCR=div;
+}
+
+#define cc1100_init	spi1_init(8,MASTER,8)
+
+void spi1_send(u16 data) {
+
+	S1SPDR=data;
+
+	while(!(S1SPSR&(1<<7)))
+		continue;
+}
+
+void bl_init(void) {
+
+	IODIR0|=(1<<4);
+}
+
+void bl_toggle(void) {
+
+	if(IOPIN0&(1<<4))
+		IOCLR0=(1<<4);
+	else
+		IOSET0=(1<<4);
+}
+
+void bl_on(void) {
+
+	IOCLR0=(1<<4);
+}
+
+void bl_off(void) {
+
+	IOSET0=(1<<4);
+}
+
 /*
  * main function
  */
@@ -173,17 +289,20 @@ u8 uart0_get_byte(void) {
 int main() {
 
 	char buf[]="betty - live from the flash at 0x80000000! ;)\r\n";
-	u8 byte;
 
 	pll_init();
 	uart0_init();
 	ext_mem_bank_init();
 	pin_select_init();
+	init_lcd(0);
+	bl_init();
+
+	pause(0xffffff);
 
 	while(1) {
-		byte=uart0_get_byte();
 		uart0_send_string(buf);
-		uart0_send_byte(byte);
+		bl_toggle();
+		pause(0x9ffff);
 	}
 
 	return 0;
-- 
2.39.5