| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- #include <stdint.h>
-
- #define pREG32 (REG32 *)
- typedef volatile uint32_t REG32;
- #define UART_BASE_ADDRESS (0x40008000)
-
- #define UART_U0LSR_THRE ((unsigned int) 0x00000020)
- #define UART_U0LSR (*(pREG32 (0x40008014)))
-
- /* Receive buffer */
- #define UART_U0RBR (*(pREG32 (0x40008000)))
-
- #define GPIO_GPIO2_BASE (0x50020000)
-
- #define GPIO_GPIO2DATA (*(pREG32 (0x50023FFC))) // Port data register
- #define GPIO_GPIO2DIR (*(pREG32 (0x50028000))) // Data direction register
-
- #define RAM_START 0x10000000
- #define RAM_SIZE 8192
-
- void pwm(int level, int top);
-
- __attribute__((naked))
- void start(void)
- {
- GPIO_GPIO2DIR = 0xFFFF;
-
- int top = 100;
-
- for (;;)
- {
- for (int level = 0; level <= top; level++)
- {
- pwm(level, top);
- }
- for (int level = top; level >= 0; level--)
- {
- pwm(level, top);
- }
- }
- }
-
- void pwm(int level, int top)
- {
- int runs = 100;
-
- for (int run = 0; run < runs; run++)
- {
- GPIO_GPIO2DATA = 0;
-
- for (volatile int j = 0; j < level; j++)
- ;
-
- GPIO_GPIO2DATA = 1;
-
- for (volatile int j = level; j <= top; j++)
- ;
- }
- }
-
- void startx(void)
- {
- GPIO_GPIO2DIR = 0xFFFF;
-
- for (;;)
-
- for (int i = 'a'; i <= 'z'; i++)
- {
- while ((UART_U0LSR & UART_U0LSR_THRE) == 0)
- ;
-
- UART_U0RBR = i;
-
- GPIO_GPIO2DATA = i & 1;
-
- for (volatile int j = 0; j < 100000; j++)
- {
- }
- }
- }
-
- __attribute__((section(".vectors")))
- const void * vectors[] = {
- (void *)(RAM_START + RAM_SIZE - 64),
- start,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- };
|