2022-06-24 01:27:26 +00:00
|
|
|
#include <stdint.h>
|
2022-06-26 16:18:19 +00:00
|
|
|
#include <stdio.h>
|
2022-06-24 01:27:26 +00:00
|
|
|
|
2022-06-26 16:18:19 +00:00
|
|
|
#include "stx7105.h"
|
2022-08-06 02:41:07 +00:00
|
|
|
#include "stx7105_utils.h"
|
2022-06-25 08:29:45 +00:00
|
|
|
|
2022-09-07 14:27:21 +00:00
|
|
|
#define LED_RED_GPIO PIO0
|
|
|
|
#define LED_RED_PIN 5U
|
2022-06-24 01:27:26 +00:00
|
|
|
|
2022-09-07 14:27:21 +00:00
|
|
|
#define LED_BLUE_GPIO PIO0
|
|
|
|
#define LED_BLUE_PIN 4U
|
2022-06-26 16:18:19 +00:00
|
|
|
|
|
|
|
#define CONSOLE_ASC ASC2
|
|
|
|
#define SYSTEM_DEVID (0xFE001000U) /* DEVID */
|
|
|
|
#define SYSTEM_CONFIG34 (0xFE001188U) /* PIO4 */
|
|
|
|
#define SYSTEM_CONFIG7 (0xFE00111CU) /* RXSEL */
|
|
|
|
|
2022-09-07 14:27:21 +00:00
|
|
|
#define MEMTEST_START 0x82000000
|
|
|
|
#define MEMTEST_END 0x8F000000
|
2022-08-09 17:21:53 +00:00
|
|
|
|
2022-08-06 02:41:07 +00:00
|
|
|
void uart_init(void) {
|
|
|
|
PIO4->CLR_PC0 = 1U; /* PC = 110, AFOUT, PP */
|
|
|
|
PIO4->SET_PC1 = 1U;
|
|
|
|
PIO4->SET_PC2 = 1U;
|
2022-06-26 16:18:19 +00:00
|
|
|
|
2022-08-06 02:41:07 +00:00
|
|
|
*(uint32_t *)SYSTEM_CONFIG34 = 0x00000100UL; /* BIT[8,0] = 10, AF 3 */
|
|
|
|
*(uint32_t *)SYSTEM_CONFIG7 &= ~(0x00000006UL); /* BIT[2:1], UART2 RX SEL */
|
2022-06-26 16:18:19 +00:00
|
|
|
|
2022-08-06 02:41:07 +00:00
|
|
|
CONSOLE_ASC->CTRL = 0x1509UL; /* 8N1, RX enable, FIFO enable, Baud mode 1 */
|
|
|
|
CONSOLE_ASC->BAUDRATE = 0x04B8UL; /* 115200 in baud mode 1, assuming Fcomm=100MHz */
|
|
|
|
CONSOLE_ASC->TX_RST = 0x01UL; /* Reset TX FIFO, any value OK */
|
|
|
|
CONSOLE_ASC->RX_RST = 0x01UL; /* Reset RX FIFO, any value OK */
|
|
|
|
CONSOLE_ASC->CTRL = 0x1589UL; /* 8N1, RX enable, FIFO enable, Baud mode 1 */
|
2022-06-25 03:57:25 +00:00
|
|
|
}
|
|
|
|
|
2022-08-09 17:21:53 +00:00
|
|
|
static void memory_test(void) {
|
2022-09-07 14:12:54 +00:00
|
|
|
printf("Begin memory test from 0x%08x to 0x%08x\r\n", MEMTEST_START, MEMTEST_END);
|
|
|
|
|
2022-08-09 17:21:53 +00:00
|
|
|
for (uint32_t i = MEMTEST_START; i < MEMTEST_END; i += 4) {
|
|
|
|
*(uint32_t *)i = i;
|
|
|
|
|
2022-09-07 14:12:54 +00:00
|
|
|
if (i % 0x100000 == 0U) {
|
2022-08-11 01:49:12 +00:00
|
|
|
printf("Write to 0x%08lx...\r\n", i);
|
2022-08-09 17:21:53 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
for (uint32_t i = MEMTEST_START; i < MEMTEST_END; i += 4) {
|
|
|
|
if (*(uint32_t *)i != i) {
|
2022-08-11 01:49:12 +00:00
|
|
|
printf("Read back error at 0x%08lx\r\n", i);
|
2022-08-09 17:21:53 +00:00
|
|
|
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2022-09-07 14:12:54 +00:00
|
|
|
if (i % 0x100000 == 0U) {
|
2022-08-11 01:49:12 +00:00
|
|
|
printf("Read from 0x%08lx...\r\n", i);
|
2022-08-09 17:21:53 +00:00
|
|
|
}
|
|
|
|
}
|
2022-09-07 14:12:54 +00:00
|
|
|
|
|
|
|
printf("Memory test finished.\r\n");
|
2022-08-09 17:21:53 +00:00
|
|
|
}
|
|
|
|
|
2022-06-21 01:34:24 +00:00
|
|
|
int main(void) {
|
2022-08-06 02:41:07 +00:00
|
|
|
init_led(LED_RED_GPIO, LED_RED_PIN, 0U);
|
|
|
|
init_led(LED_BLUE_GPIO, LED_BLUE_PIN, 0U);
|
2022-06-26 16:18:19 +00:00
|
|
|
|
2022-09-07 14:27:21 +00:00
|
|
|
setbuf(stdout, NULL);
|
|
|
|
setbuf(stderr, NULL);
|
2022-08-11 01:49:12 +00:00
|
|
|
|
2022-06-26 16:18:19 +00:00
|
|
|
uart_init();
|
|
|
|
|
2022-08-06 02:41:07 +00:00
|
|
|
printf("Hello world\r\n");
|
2022-06-24 01:27:26 +00:00
|
|
|
|
2022-09-07 14:12:54 +00:00
|
|
|
__trapa(34); /* TRAPA test code.. */
|
2022-08-09 17:21:53 +00:00
|
|
|
|
|
|
|
memory_test();
|
|
|
|
|
2022-06-24 01:27:26 +00:00
|
|
|
for (;;) {
|
2022-08-06 02:41:07 +00:00
|
|
|
set_led(LED_BLUE_GPIO, LED_BLUE_PIN, 1U);
|
|
|
|
delay_ms(500);
|
|
|
|
set_led(LED_BLUE_GPIO, LED_BLUE_PIN, 0U);
|
|
|
|
delay_ms(500);
|
2022-06-21 01:34:24 +00:00
|
|
|
}
|
2022-06-26 16:36:14 +00:00
|
|
|
|
|
|
|
return 0;
|
2022-08-06 02:41:07 +00:00
|
|
|
}
|
2022-09-07 14:12:54 +00:00
|
|
|
|
|
|
|
/* tra #34 is SysCall.. */
|
|
|
|
int syscall_handler(uint32_t p1, uint32_t p2, uint32_t p3, uint32_t p4) {
|
|
|
|
set_led(LED_RED_GPIO, LED_RED_PIN, 1U);
|
|
|
|
return 0;
|
|
|
|
}
|