Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // SPDX-License-Identifier: GPL-2.0 or later
- // Made by Soupborsh, tested on PB618. I tried to do puts function but it outputs garbage
- // compile and run this by:
- // arm-none-eabi-gcc -I /usr/include/ -nostdlib -nostartfiles -static serial-putc.c -o serial-putc -O3
- // arm-none-eabi-objcopy -O binary serial-putc serial-putc.bin
- // sunxi-fel write 0x2000 /path/to/serial-putc.bin
- // sunxi-fel exe 0x2000
- #include <stdint.h>
- #define UART0_BASE 0x01c28000
- #define UART_VALUE_TX_MODE 0x00100000
- #define UART_VALUE_RX_MODE 0x00000000
- #define UART_VALUE_CHAR 0x000000ff
- uint32_t inline readl(volatile uint32_t *address);
- void inline writel(volatile uint32_t *address, uint32_t value);
- void uart_putc(const char c);
- void main(void) {
- uart_putc('B');
- uart_putc('2');
- uart_putc('8');
- uart_putc('8');
- uart_putc('\n');
- return;
- }
- void inline writel(volatile uint32_t *address, uint32_t value) {
- volatile uint32_t *ptr = address;
- *ptr = value;
- return;
- }
- uint32_t inline readl(volatile uint32_t *address) {
- volatile uint32_t *ptr = address;
- return *ptr;
- }
- void uart_putc(const char c) {
- while (((readl((volatile uint32_t *)UART0_BASE)) & UART_VALUE_TX_MODE) !=
- UART_VALUE_RX_MODE)
- ;
- writel((volatile uint32_t *)UART0_BASE,
- UART_VALUE_TX_MODE | (c & UART_VALUE_CHAR));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement