blob: 01322758af43bcf8d86b7b265aff8db6c620347e (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
// Source code under CC0 1.0
#include <stdint.h>
#include <stdio.h>
#define PC_DDR (*(volatile uint8_t *)0x500c)
#define PC_CR1 (*(volatile uint8_t *)0x500d)
#define CLK_DIVR (*(volatile uint8_t *)0x50c0)
#define CLK_PCKENR1 (*(volatile uint8_t *)0x50c3)
#define USART1_SR (*(volatile uint8_t *)0x5230)
#define USART1_DR (*(volatile uint8_t *)0x5231)
#define USART1_BRR1 (*(volatile uint8_t *)0x5232)
#define USART1_BRR2 (*(volatile uint8_t *)0x5233)
#define USART1_CR2 (*(volatile uint8_t *)0x5235)
#define USART1_CR3 (*(volatile uint8_t *)0x5236)
#define USART_CR2_TEN (1 << 3)
#define USART_CR3_STOP2 (1 << 5)
#define USART_CR3_STOP1 (1 << 4)
#define USART_SR_TXE (1 << 7)
int putchar(int c)
{
while(!(USART1_SR & USART_SR_TXE));
USART1_DR = c;
return c;
}
char dbuf[10];
char xbuf[10];
void main(void)
{
unsigned long i = 0;
int a= 0;
CLK_DIVR = 0x00; // Set the frequency to 16 MHz
CLK_PCKENR1 = 0xFF; // Enable peripherals
PC_DDR = 0x08; // Put TX line on
PC_CR1 = 0x08;
USART1_CR2 = USART_CR2_TEN; // Allow TX and RX
USART1_CR3 &= ~(USART_CR3_STOP1 | USART_CR3_STOP2); // 1 stop bit
USART1_BRR2 = 0x03; USART1_BRR1 = 0x68; // 9600 baud
sprintf(dbuf, "%d", 1234);
printf("%s\n", dbuf);
sprintf(xbuf, "%x", 0x1234);
printf("%s\n", xbuf);
for(;;)
{
printf("Hello World %d %x!\n", a, a);
for(i = 0; i < 147456; i++); // Sleep
a++;
}
}
|