From 4db3756dacea353606242172ca68180af9bb9b2d Mon Sep 17 00:00:00 2001 From: Mariano Alvira Date: Thu, 2 Apr 2009 14:54:02 -0400 Subject: [PATCH] checkpoint --- boot.lds | 1 + tests/blink-red.c | 3 +- tests/rftest-rx.c | 96 ++++++++++++++++++++++++++++++++++----- tests/rftest-tx.c | 100 +++++++++++++++++++++++++++++++++++++++++ tests/uart1-loopback.c | 9 ++-- 5 files changed, 192 insertions(+), 17 deletions(-) create mode 100644 tests/rftest-tx.c diff --git a/boot.lds b/boot.lds index b800cb3c9..c9f49a561 100644 --- a/boot.lds +++ b/boot.lds @@ -32,6 +32,7 @@ SECTIONS . = ALIGN(4); .text : { + *(startup) *(.text) } diff --git a/tests/blink-red.c b/tests/blink-red.c index 794d82652..0780033e0 100644 --- a/tests/blink-red.c +++ b/tests/blink-red.c @@ -6,8 +6,7 @@ #include "embedded_types.h" -void main(void) { - +__attribute__ ((section ("startup"))) void main(void) { *(volatile uint32_t *)GPIO_PAD_DIR0 = 0x00000100; volatile uint32_t i; diff --git a/tests/rftest-rx.c b/tests/rftest-rx.c index eeb0b3d9c..2e46f944a 100644 --- a/tests/rftest-rx.c +++ b/tests/rftest-rx.c @@ -9,7 +9,9 @@ #define UART1_CTS 0x80005014 #define UART1_BR 0x80005018 +#define MACA_BASE 0x80004000 #define MACA_RESET 0x80004004 +#define MACA_RANDOM 0x80004008 #define MACA_CONTROL 0x8000400c #define MACA_STATUS 0x80004010 #define MACA_DMARX 0x80004080 @@ -19,31 +21,103 @@ #include "embedded_types.h" +#define reg(x) (*(volatile uint32_t *)(x)) + +#define DELAY 400000 +#define DATA 0x00401000; + +void putc(uint8_t c); +void puts(uint8_t *s); +void put_hex(uint8_t x); +void put_hex16(uint16_t x); +void put_hex32(uint32_t x); + +const uint8_t hex[16]={'0','1','2','3','4','5','6','7', + '8','9','a','b','c','d','e','f'}; + +__attribute__ ((section ("startup"))) void main(void) { + uint8_t c; + volatile uint32_t i; + volatile uint32_t *data; + /* Restore UART regs. to default */ /* in case there is still bootloader state leftover */ - *(volatile uint32_t *)UART1_CON = 0x0000c800; /* mask interrupts, 16 bit sample --- helps explain the baud rate */ + reg(UART1_CON) = 0x0000c800; /* mask interrupts, 16 bit sample --- helps explain the baud rate */ /* INC = 767; MOD = 9999 works: 115200 @ 24 MHz 16 bit sample */ #define INC 767 #define MOD 9999 - *(volatile uint32_t *)UART1_BR = INC<<16 | MOD; + reg(UART1_BR) = INC<<16 | MOD; /* see Section 11.5.1.2 Alternate Modes */ /* you must enable the peripheral first BEFORE setting the function in GPIO_FUNC_SEL */ /* From the datasheet: "The peripheral function will control operation of the pad IF */ /* THE PERIPHERAL IS ENABLED. */ - *(volatile uint32_t *)UART1_CON = 0x00000003; /* enable receive and transmit */ - *(volatile uint32_t *)GPIO_FUNC_SEL0 = ( (0x01 << (14*2)) | (0x01 << (15*2)) ); /* set GPIO15-14 to UART (UART1 TX and RX)*/ + reg(UART1_CON) = 0x00000003; /* enable receive and transmit */ + reg(GPIO_FUNC_SEL0) = ( (0x01 << (14*2)) | (0x01 << (15*2)) ); /* set GPIO15-14 to UART (UART1 TX and RX)*/ - uint8_t c; - while(1) { - if(*(volatile uint32_t*)UR1CON > 0) { - /* Receive buffer isn't empty */ - /* read a byte and write it to the transmit buffer */ - c = *(volatile uint32_t *)UART1_DATA; - *(volatile uint32_t *)UART1_DATA = c; + reg(MACA_RESET) = 0x3; /* reset, turn on the clock */ + reg(MACA_RESET) = 0x2; /* unreset, turn on the clock */ + reg(MACA_CONTROL) = 0x00000224; /* continuous receive test mode */ + reg(MACA_DMARX) = DATA; /* put data somewhere */ + data = DATA; + + + data[0] = 0xdeadbeef; + + puts("\033[H\033[2J"); + while(1) { + puts("\033[Hrftest-rx --- "); + puts(" maca_getrxlvl: 0x"); + put_hex(reg(MACA_GETRXLVL)); + puts(" data[0]: 0x"); + put_hex32(data[0]); + puts(" status: 0x"); + put_hex32(reg(MACA_STATUS)); + puts(" random: 0x"); + put_hex32(reg(MACA_RANDOM)); + puts("\n\r"); + for (i = 0; i < 96; i ++) { + put_hex32(reg(MACA_BASE+(4*i))); + if ((i & 7) == 7) + puts("\n\r"); + else + putc(' '); } + for(i=0; i> 4]); + putc(hex[x & 15]); +} + +void put_hex16(uint16_t x) +{ + put_hex((x >> 8) & 0xFF); + put_hex((x) & 0xFF); +} + +void put_hex32(uint32_t x) +{ + put_hex((x >> 24) & 0xFF); + put_hex((x >> 16) & 0xFF); + put_hex((x >> 8) & 0xFF); + put_hex((x) & 0xFF); +} diff --git a/tests/rftest-tx.c b/tests/rftest-tx.c new file mode 100644 index 000000000..ca95d0628 --- /dev/null +++ b/tests/rftest-tx.c @@ -0,0 +1,100 @@ +#define GPIO_FUNC_SEL0 0x80000018 /* GPIO 15 - 0; 2 bit blocks */ + +#define BASE_UART1 0x80005000 +#define UART1_CON 0x80005000 +#define UART1_STAT 0x80005004 +#define UART1_DATA 0x80005008 +#define UR1CON 0x8000500c +#define UT1CON 0x80005010 +#define UART1_CTS 0x80005014 +#define UART1_BR 0x80005018 + +#define MACA_RESET 0x80004004 +#define MACA_CONTROL 0x8000400c +#define MACA_STATUS 0x80004010 +#define MACA_DMARX 0x80004080 +#define MACA_DMATX 0x80004084 +#define MACA_GETRXLVL 0x80004098 +#define MACA_PREAMBLE 0x8000411c + +#include "embedded_types.h" + +#define reg(x) (*(volatile uint32_t *)x) + +#define DELAY 400000 +#define DATA 0x00401000; + +void putc(uint8_t c); +void puts(uint8_t *s); +void put_hex(uint8_t x); +void put_hex16(uint16_t x); +void put_hex32(uint32_t x); + +const uint8_t hex[16]={'0','1','2','3','4','5','6','7', + '8','9','a','b','c','d','e','f'}; + +__attribute__ ((section ("startup"))) +void main(void) { + uint8_t c; + volatile uint32_t i; + volatile uint32_t *data; + + /* Restore UART regs. to default */ + /* in case there is still bootloader state leftover */ + + reg(UART1_CON) = 0x0000c800; /* mask interrupts, 16 bit sample --- helps explain the baud rate */ + + /* INC = 767; MOD = 9999 works: 115200 @ 24 MHz 16 bit sample */ + #define INC 767 + #define MOD 9999 + reg(UART1_BR) = INC<<16 | MOD; + + /* see Section 11.5.1.2 Alternate Modes */ + /* you must enable the peripheral first BEFORE setting the function in GPIO_FUNC_SEL */ + /* From the datasheet: "The peripheral function will control operation of the pad IF */ + /* THE PERIPHERAL IS ENABLED. */ + reg(UART1_CON) = 0x00000003; /* enable receive and transmit */ + reg(GPIO_FUNC_SEL0) = ( (0x01 << (14*2)) | (0x01 << (15*2)) ); /* set GPIO15-14 to UART (UART1 TX and RX)*/ + + reg(MACA_RESET) = 0x3; /* reset, turn on the clock */ + reg(MACA_RESET) = 0x2; /* unreset, turn on the clock */ + reg(MACA_CONTROL) = 0x00000223; /* continuous transmit test mode */ + reg(MACA_PREAMBLE) = 0xface0fff; + + while(1) { + puts("rftest-tx --- "); + for(i=0; i> 4]); + putc(hex[x & 15]); +} + +void put_hex16(uint16_t x) +{ + put_hex((x >> 8) & 0xFF); + put_hex((x) & 0xFF); +} + +void put_hex32(uint32_t x) +{ + put_hex((x >> 24) & 0xFF); + put_hex((x >> 16) & 0xFF); + put_hex((x >> 8) & 0xFF); + put_hex((x) & 0xFF); +} diff --git a/tests/uart1-loopback.c b/tests/uart1-loopback.c index 54e0f7f68..fd6eafdb9 100644 --- a/tests/uart1-loopback.c +++ b/tests/uart1-loopback.c @@ -31,11 +31,12 @@ void main(void) { uint8_t c; while(1) { - if(*(volatile uint32_t*)UR1CON > 0) { + *(volatile uint32_t *)UART1_DATA = (uint8_t)'U'; +// if(*(volatile uint32_t*)UR1CON > 0) { /* Receive buffer isn't empty */ /* read a byte and write it to the transmit buffer */ - c = *(volatile uint32_t *)UART1_DATA; - *(volatile uint32_t *)UART1_DATA = c; - } +// c = *(volatile uint32_t *)UART1_DATA; +// *(volatile uint32_t *)UART1_DATA = c; +// } }; }