atomthreads 3

追記:最新版ではこれらの変更なしで動くようになったので,以下の内容はobsoleteです.2010/2/23

ATMega16でしかコンパイルできないと書いたが,マイナーチェンジでATMega168などでコンパイルできることがわかった.
makeでエラーが出るのはレジスタ名がちょっと違うだけだと気付いた.
include/avr/iom16.hにおいて

#define TIMSK   _SFR_IO8(0x39)

となっているが,これに対応するのは
include/avr/iom168p.hにおいて

#define TIMSK0 _SFR_MEM8(0x6E)
#define TIMSK1 _SFR_MEM8(0x6F)
#define TIMSK2 _SFR_MEM8(0x70)

なので,TIMSK -> TIMSK1 に変更するだけでよい.(TIMSK0->TIMSK1に訂正 2010/2/23)

diff atomport.c orig/atomport.c 
265c265
+     TIMSK1 = _BV(OCIE1A);
-     TIMSK = _BV(OCIE1A);

変更すべきはあとuart.cだけで

diff uart.c orig/uart.c 
40,41c40,41
+   UCSR0A = _BV(U2X);             /* improve baud rate error by using 2x clk */
+  UBRR0L = (AVR_CPU_HZ / (8UL * baudrate)) - 1;

-   UCSRA = _BV(U2X);             /* improve baud rate error by using 2x clk */
-   UBRRL = (AVR_CPU_HZ / (8UL * baudrate)) - 1;
43c43
+   UBRR0L = (AVR_CPU_HZ / (16UL * baudrate)) - 1;
-   UBRRL = (AVR_CPU_HZ / (16UL * baudrate)) - 1;
45c45
+   UCSR0B = _BV(TXEN0) | _BV(RXEN0); /* tx/rx enable */
-   UCSRB = _BV(TXEN) | _BV(RXEN); /* tx/rx enable */
77,78c77,78
+     loop_until_bit_is_set(UCSR0A, UDRE0);
+     UDR0 = c;
-     loop_until_bit_is_set(UCSRA, UDRE);
-     UDR = c;

これだけの変更で,ATMega168,328,644などでもコンパイルできることがわかった.

広告
カテゴリー: AVR
atomthreads 3」への1件のコメント
  1. […] atomthreads 4 2010/02/24 stastaka コメントをどうぞ コメントへ twitterをフォローしてなかったので見逃したが、 STM8Sとatmegas with 24 bit program counter に対応していた。最新のコードは git clone git://github.com/kelvinlawson/atomthreads.git 一つ前のポストで168などへの対応について書いたが、最新版を見ると間違い(TIMSK)があったので、訂正した。 […]

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

カテゴリー
2010年2月
« 1月   3月 »
1234567
891011121314
15161718192021
22232425262728
%d人のブロガーが「いいね」をつけました。