2 * betty.c - alternative firmware for the betty tv ;)
4 * author: hackbard@hackdaworld.org
14 void mmap_init(u8 memtype) {
22 PLLCFG=0x42; // multiplier = 3 (for cclk), dividor = 4 (for f_cco)
23 PLLCON=0x03; // enable and set as clk source for the lpc
28 while(!(PLLSTAT&(1<<10)))
32 void ext_mem_bank_init(void) {
34 BCFG0=0x10000420; // flash 1
35 BCFG1=0x00000c42; // lcd
36 BCFG2=0x10000420; // flash 2
40 void pin_select_init() {
43 * a[19:2] -> address lines
49 void uart0_init(void) {
51 /* select pins 0.0 and 0.1 as tx and rx */
52 PINSEL0=(PINSEL0&~(0xf))|0x05; // pin select -> tx, rx
55 UART0_FCR=0x07; // enable fifo
56 UART0_LCR=0x83; // set dlab + word length
57 UART0_DLL=0x04; // br: 38400 @ 10/4 mhz
59 UART0_LCR=0x03; // unset dlab
62 void uart0_send_string(char *txbuf) {
70 /* flush if tx buffer maximum reached */
72 while(!(UART0_LSR&(1<<6)))
76 /* flush if \n and \r do not fit in the tx buffer */
78 while(!(UART0_LSR&(1<<6)))
84 /* flush uart0 anyways */
85 while(!(UART0_LSR&(1<<6)))
89 void uart0_send_buf16(u16 *buf,int len) {
95 for(i=0;i<len/2;i++) {
97 while(!(UART0_LSR&(1<<6)))
99 UART0_THR=buf[i]&0xff;
100 UART0_THR=(buf[i]>>8)&0xff;
104 void uart0_send_buf32(u32 *buf,int len) {
110 for(i=0;i<len/4;i++) {
112 while(!(UART0_LSR&(1<<6)))
114 UART0_THR=buf[i]&0xff;
115 UART0_THR=(buf[i]>>8)&0xff;
116 UART0_THR=(buf[i]>>16)&0xff;
117 UART0_THR=(buf[i]>>24)&0xff;
121 void uart0_send_byte(u8 send) {
123 while(!(UART0_LSR&(1<<5)))
129 u8 uart0_get_byte(void) {
133 while(!(UART0_LSR&(1<<0)))
141 void pause(int cnt) {
144 asm volatile ("nop");
147 void init_lcd(u8 s) {
198 * spi0 stuff (+ cc1100)
204 void spi1_init(u8 width,u8 type,u8 div) {
206 if((width<8)|(width>16))
215 S1SPCR=(1<<2)|(width<<8)|(type<<5);
219 #define cc1100_init spi1_init(8,MASTER,8)
221 void spi1_send(u16 data) {
225 while(!(S1SPSR&(1<<7)))
234 void bl_toggle(void) {
258 char buf[]="betty - live from the flash at 0x80000000! ;)\r\n";
275 uart0_send_string("\n");
276 //uart0_send_string(buf);
279 button_get_event(&keys,1000);
282 // uart0_send_byte(0x30+i);
284 uart0_send_byte(keys&(1<<i)?0x31:0x30);