環境/environment
arduinoのhardwareserialのコードをasembblyで描きたい
void setup() {
asm(
//baudrateの設定
"ldi R16,0x00 \n"
"sts 0x00C5,R16 \n"
"ldi R16,0x07 \n"
"sts 0x00C4, R16 \n"
//baudrateが300と57600の時は0b00000000をつかう
"ldi R16,0b00000010 \n"
"sts 0x00C0, R16 \n"
"ldi R16,0b11001000 \n"
"sts 0x00C1, R16 \n"
"ldi R16,0b00000110 \n"
"sts 0x00C2, R16 \n"
);
asm(
"USART_Tx: \n"
"LDS R16,192 \n"
"SBRS R16, 5 \n"
"RJMP USART_Tx \n"
//udrレジスタに書き込み
"ldi R16,0x21 \n"
"sts 0x00C6, R16 \n"
//UCSR0B(0x00C1)UDRIE0(bit 5)をセット
"lds R16,0x00C1 \n"
"ori R16,0b00100000 \n"
"sts 0x00C1, R16 \n"
);
}
void loop() {
}
baudrateとUBRR0H、UBRR0Lのsetting
baudrate | UBRR0H | UBRR0L |
---|---|---|
300 | 13 | 4 |
1200 | 6 | 130 |
2400 | 3 | 64 |
4800 | 1 | 160 |
9600 | 0 | 207 |
19200 | 0 | 103 |
38400 | 0 | 51 |
57600 | 0 | 16 |
74880 | 0 | 26 |
115200 | 0 | 16 |
230400 | 0 | 8 |
250000 | 0 | 7 |
500000 | 0 | 3 |
1000000 | 0 | 1 |
2000000 | 0 | 0 |