2017年12月15日
moderoll()について調べたこと(備忘録)
moderoll()は、kit_scope.ino 中の loop() の中にある関数です。
詳細はまだ不明。
@rmon==0の時(プログラム開始直後の時か?)
各種レジスターに値を代入
Aheader(3, 0)を実行
txput1(0)
txput1(osctvolt)
txputcrc(false)
上記は何かしらデータを送信している
Btxgo()を実行 パケットを送信開始
Cfor文を実行 この中でおそらく初めにヘッダーデータを、次に波形データを送信しているらしい
Dtxputcrc(false)
txfinish(true, true) を実行し、一連のデータ送信が完了ということらしい
ソースコードは下記の通り。
詳細はまだ不明。
@rmon==0の時(プログラム開始直後の時か?)
各種レジスターに値を代入
Aheader(3, 0)を実行
txput1(0)
txput1(osctvolt)
txputcrc(false)
上記は何かしらデータを送信している
Btxgo()を実行 パケットを送信開始
Cfor文を実行 この中でおそらく初めにヘッダーデータを、次に波形データを送信しているらしい
Dtxputcrc(false)
txfinish(true, true) を実行し、一連のデータ送信が完了ということらしい
ソースコードは下記の通り。
void
moderoll()
{
byte i;
if (rmon == 0) { // start rollmode
// reset and initialize timer1
TCCR1B = 0x00; // stop
TCCR1A = 0x00;
TIMSK1 = 0x00; // no irq
TCNT1 = 0x0000;
ICR1 = 200; // 100 usec
TIFR1 = 0x27; // clear flags;
ACSR = 0x94; // disable analog comparator
ADCSRB = 0x00;
ADCSRA = 0x84; // adc enable
ADMUX = 0x60; // adc target is A0 pin to get trigger value;
ADCSRB = 0x07; // timer1 capture event;
ADCSRA = 0xf4; // adc auto trigger, force start 1st conversion
TCCR1B = 0x1a; // timer1 CTC-ICR1 mode pre1/8
TCCR1A = 0x00; // CTC mode;
// wait until the 1st conversion finishes.
while((ADCSRA & 0x10) == 0x00)
uartjob();
osctvolt = ADCH; // trigger level
ADMUX = 0x61;
ADCSRA = 0xb4; // clear flag, 1MHz, adate on
rminit(true);
}
header(3, 0);
txput1(0);
txput1(osctvolt);
txputcrc(false);
txgo(); // start to trasmit a packet
for(i = 0; i < 200; i++) {
while(rmw == rmr)
uartjob();
txput1(rmbuf[rmr++]);
}
txputcrc(false);
txfinish(true, true);
}
【このカテゴリーの最新記事】
-
no image
-
no image
-
no image
-
no image
-
no image
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/7091036
※ブログオーナーが承認したトラックバックのみ表示されます。
※言及リンクのないトラックバックは受信されません。
この記事へのトラックバック