X-Git-Url: https://hackdaworld.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=betty%2Ffwbc.c;h=9682ee8292fb4396fb98f16f29aaf2560844e0a6;hb=ba94d4dc80e71b41a6458e028dd45673782bc5f5;hp=46a342c8ab3e6e3101a8b00f70c1d0d6215b6973;hpb=2cdab277c293b22742ebf7888ca8ac40555f4f1d;p=my-code%2Farm.git diff --git a/betty/fwbc.c b/betty/fwbc.c index 46a342c..9682ee8 100644 --- a/betty/fwbc.c +++ b/betty/fwbc.c @@ -6,49 +6,115 @@ * */ +/* + * include files + */ + #include "lpc2xxx.h" +/* + * defines + */ + +/* misc */ #define OSC_CLOCK 10000000 #define BAUDRATE 9600 -#define P_DIV 1 +#define P_DIV 4 #define P_CLOCK (OSC_CLOCK/P_DIV) -typedef unsigned char u8; +/* memory mapping */ +#define MMAP_BL 0x00 +#define MMAP_RAM 0x02 +#define MMAP_EXT 0x03 -void uart0_init(int br) { +/* + * type definitions + */ - PINSEL0&=~((0x03<<0)|(0x03<<2)); // clear bits 0-3 - PINSEL0|=((1<<0)|(1<<2)); // pin select: tx, rx +typedef unsigned char u8; +typedef unsigned int u32; - UART0_LCR|=(1<<7); // enable access to divisor - UART0_DLL=(P_CLOCK/(br*16))&0xff; // set divisor - UART0_DLL=((P_CLOCK/(br*16))&0xff00)>>8; - UART0_LCR&=~(1<<7); // disable access to divisor +/* + * function prototypes + */ - UART0_LCR&=~(0x03<<2); // 1 stop bit, no parity - UART0_LCR|=0x03; // 8 data bits +void mmap_init(u8 memtype); +void uart0_init(void); +void uart0_send_string(char *txbuf); +void uart0_send_char(char send); - UART0_FCR=0x01; // activate fifo -} +/* + * main function + */ + +int main(void) { -void uart_send(u8 byte) { + /* memory mapping of interrupt vectors to static ram */ - /* wait for empty transmit buffer */ - while(!(UART0_LSR&(1<<5))) - continue; + //mmap_init(MMAP_RAM); - UART0_THR=byte; -} + /* uart initialization */ -int main(void) { +#ifdef USE_FUNCTIONS + //uart0_init(); +#else + PINSEL0=0x05; // pin select -> tx, rx + UART0_FCR=0x07; // enable fifo + UART0_LCR=0x83; // set dlab + word length + UART0_DLL=0x10; // br: 9600 @ 10/4 mhz + UART0_DLM=0x00; + UART0_LCR=0x03; // unset dlab +#endif - /* initialization */ - uart0_init(9600); + /* external memory init */ while(1) { - uart_send(0x23); + while(!(UART0_LSR&(1<<5))) + continue; + UART0_THR=0x23; } return 0; } +/* + * functions + */ + +void mmap_init(u8 memtype) { + + MEMMAP=memtype; +} + +void uart0_init(void) { + + PINSEL0=0x05; // pin select -> tx, rx + UART0_FCR=0x07; // enable fifo + UART0_LCR=0x83; // set dlab + word length + UART0_DLL=0x10; // br: 9600 @ 10/4 mhz + UART0_DLM=0x00; + UART0_LCR=0x03; // unset dlab +} + +void uart0_send_string(char *txbuf) { + + int i; + + i=0; + + while(txbuf[i]) + UART0_THR=txbuf[i++]; + UART0_THR='\n'; + UART0_THR='\r'; + + while(!(UART0_LSR&(1<<6))) {} +} + +void uart0_send_char(char send) { + + while(!(UART0_LSR&(1<<5))) + continue; + + UART0_THR=send; +} +