CでArduinoのシリアルをプログラミングする際に問題があります。アプリケーションでスピードが必要なため、Cで行う必要があります。Codeblocksを使用しています。コンパイル。ATmega328PでUDREを使用する割り込み駆動型USART
私はまた、シリアル機能がアプリケーションをブロックしてデバッグ機能を与えないようにしたいので、循環バッファ型のシリアルライブラリを作成しようとしています。アプリケーションはデータを受け取る必要はなく、印刷するだけです。
問題はシリアル割り込み明らかに発射されず、プログラムブロックで始まり、コンパイラは警告を与えて行います。
main.c|11|warning: ‘UART_UDRE_vect’ appears to be a misspelled signal handler|
次のようにテストプログラムは次のとおりです。
#include<avr/io.h>
#include<avr/interrupt.h>
#define USART_BAUDRATE 9600
#define BAUD_PRESCALE (((F_CPU/(USART_BAUDRATE*16UL)))-1)
char ok = 0;
ISR(UART_UDRE_vect) {
ok = 1;
UCSR0B &= ~(1<<5);
}
int main(void) {
UBRR0H = (BAUD_PRESCALE >> 8);
UBRR0L = BAUD_PRESCALE;
UCSR0B |= (1<<TXEN0);
UCSR0C |= (1<<UCSZ00) | (1<<UCSZ01);
sei();
while(1){
// write the byte to the serial port
UDR0 = '0';
UCSR0B |= (1<<5);
while(ok != 1){}
ok = 0;
UDR0 = '\n';
UCSR0B |= (1<<5);
while(ok != 1){}
ok = 0;
}
return 0;
}
設定とエコーの例であるhereが機能するため、ボーレートは正しいです。
また、他の例ではUDREを使用せず、RX割り込みのみを使用していますが、これは私が探しているものではありません。
何か忘れていますか?
に変更してください。このツールチェーンはまったくわかりませんが、一般的な問題は割り込みベクタテーブルに割り込みを登録することです。これはここでどのように行われますか? – Lundin
interrutionsはavr interrupt.hライブラリに記載されています。[link](http://www.atmel.com/webdoc/avrlibcreferencemanual/group__avr__interrupts.html) – BigFilhao
ArduinoはC++を使用していますか? –