2017年12月17日
uartjob() について調べたこと(備忘録)
ソースコードは下記になります。
rollmodeだとrmbuf[]にADCH(ADCの上位8bit)を書き込む。
そうじゃないと、UDR0にtxbuf[]を書き込む。
rollmodeだとrmbuf[]にADCH(ADCの上位8bit)を書き込む。
そうじゃないと、UDR0にtxbuf[]を書き込む。
void
uartjob()
{
byte sts;//sts は、status のことらしい
sts = UCSR0A;//UCSRnA - USARTn制御/状態レジスタA (USART Control and Status Register n A)
if ((char)sts < 0) //UCSR0Aの第7bitが1、つまり受信バッファに未読データありということ
rxbuf[rxn++] = UDR0;//UDRn - USARTnデータ レジスタ (USART I/O Data Register n)
//受信バッファにデータがあるのでrxbuf[]に取り込んだ
// in case rxbuf[] overflow, no fatal situation happens.
// because rxn is an 8 bit variable and rxbuf[] size is 256.
if (rmon) {//rmonって何? rmってroll memoryのことらしい
//rmonは、onがtrueの時に1としているみたい、falseなら0
//ここは殆ど通らないところ?
if (TIFR1 & 0x20)//TIFR1 - タイマ/カウンタ1割り込み要求フラグ レジスタ (Timer/Counter 1 Interrupt Flag Register)
//カウンタ1がTOP値になった
TIFR1 = 0x27; // clear timer1 flags; タイマ/カウンタ1割り込み要求フラグを全部クリアしている
if (ADCSRA & 0x10) {//ADCSRA - A/D制御/状態レジスタA (ADC Control and Status Register A)
if (rmon == 1) {
ICR1 = 100 - 1; // 50us
//ICR1は16bitレジスタ カウンタに設定する値
//0.5usを100倍すると50us
ADMUX = 0x62;//ADMUX - A/D多重器選択レジスタ (ADC Multiplexer Select Register)
//0x62 基準電圧はAVCCでアナログ入力はADC2 PC2 下記のコメントと矛盾
rmon = 2;
rmbuf[rmw++] = ADCH; // CH1(A1pin) value
//ADCの値は、8bit精度ならADCHを読むだけで事足りる(ADCLは読まない)
}
else if (rmon == 2) {
ICR1 = 400 - 1; // 200us
//0.5usを400倍すると200us
ADMUX = 0x60;//0x60 基準電圧はAVCCでアナログ入力はADC0 PC0 下記のコメントと矛盾
rmbuf[rmw++] = ADCH; // CH2(A2pin) value
rmon = 3;
}
else {
ICR1 = 500 - 1; // 250us
//0.5usを500倍すると250us
ADMUX = 0x61;//0x61 基準電圧はAVCCでアナログ入力はADC1 PC1 下記のコメントと矛盾
rmon = 1;
osctvolt = ADCH; // trigger level
}
ADCSRA = 0xb4; // clear flags, 1MHz, adate on
//ADCSRA - A/D制御/状態レジスタA (ADC Control and Status Register A)
//システムクロック16分周
return; //in order to release cpu quickly
}
}
if (txr < txn && (sts & 0x20)) {
UCSR0A = (sts & 0xe3) | 0x40;
UDR0 = txbuf[txr++];//UDRn - USARTnデータ レジスタ (USART I/O Data Register n)
//UDR0は送受信バッファ、バッファに送信データを書き込む
}
}
【このカテゴリーの最新記事】
-
no image
-
no image
-
no image
-
no image
-
no image
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/7098623
※ブログオーナーが承認したトラックバックのみ表示されます。
※言及リンクのないトラックバックは受信されません。
この記事へのトラックバック