Top / 日記 / 2007 / 10 / 31

  • 追加された行はこの色です。
  • 削除された行はこの色です。
*2007年10月31日の日記 [#nfc275cd]
**助けてください [#l0701e37]
相変わらずコソコソとAVRで遊んでます。
で、最近どうしても解決出来ない悩み事。

 .include "tn2313def.inc"
 .cseg
 		rjmp	reset
 		reti
 		reti
 		reti
 		reti
 		reti
 		rjmp	tim0_ovf
 
 tim0_ovf:
 		in		r14, SREG
 		sbi		PORTB,0
 		ldi		r16,255
 		dec		r16
 		brne	PC-1
 		dec		r17
 		cbi		PORTB,0
 		out		SREG,r14
 		reti
 
 reset:	
 		ldi		r16,255
 		out		DDRB,r16
 		
 		ldi		r16, 0b00000101		;1/1024
 ;		ldi		r16, 0b00000001		;1/1 Debug
 		out		TCCR0B, r16
 		ldi		r16, (1<<TOV0)
 		out		TIMSK, r16
 		sei
 		sbi		PORTB,3
 
 loop:
 		ldi		r17,10
 		sbi		PORTB,1
 		cbi		PORTB,2
 		cpi		r17,0
 		brne	PC-1
 
 		ldi		r17,10
 		cbi		PORTB,1
 		sbi		PORTB,2
 		cpi		r17,0
 		brne	PC-1
 
 
 		rjmp	loop

実験的にこういうモノを書いてみますた。~
実際にアセンブルして焼いてみたら、思惑通りにPB3のLEDが点灯し、PB0のLEDがピコピコ光りつつ、PB1とPB2のLEDが交互に光ります。

&attachref(MAV_0009.3G2);

しかし、これをAVRStudioのエミュレータで走らせると、スタックがウンタラヌカして、割り込みで飛んだ先でループします。orz~
これに限らず、割り込みを掛けるとエラーがドバっと出て、ロクに動きません。~
これって悪いの俺なのか、それともAVRStudioなんだろ?

とりあえずハラ減った。~
メシ買うてこ。

**自己解決 [#e321dfb9]
こういう事でした。

 reset:
 	ldi	TMP,LOW(RAMEND)
 	out	SPL,TMP

原因は、スタックポインタレジスタの初期化をしていなかったって事ですわ。
SRAM内蔵の石は、スタックポインタレジスタをRAMのケツに置くようなんですが、その位置を上のようなおまじないで決めてやらんとあかんみたいです。
ちなみに内蔵SRAM256バイト以下の石は下位バイトのみ、ソレ以上は上位も入れてやる必要があるらしい。

***コメント [#s21d23fe]
- ありがちな失敗ですね。自分も良く忘れました。 -- [[オジギ草]] &new{2007-11-02 02:04:37 (金)};
-- 世間で見かけるお手本で、1200やmega系はそれなりに有るのですが、意外にTiny2313って少ないみたいです。(^^;)それと大昔にX68Kで少しアセンブラかじった事ありますが、まあ全くのド初心者なもので、普通にソースを頭で負えないのが辛かったです。今ならそれなりに慣れてきましたが、まだまだイッパツでは決まりませんねぇ。(^^;)修行あるのみです。-- [[しらいまさや]] &new{2007-11-03 12:23:57 (土)};
- 昔はROMを焼くのに5分消すのに10分以上かかったもんです。今はすぐ書き換えられるからカットアンドトライもしやすくなりましたよね。うちのAVRはまだ書き込み出来ません。 -- [[コー]] &new{2007-11-03 12:51:54 (土)};

#commentx

#back

Top / 日記 / 2007 / 10 / 31
トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS