瀏覽代碼

avrpgm: add EEPROM support

also, verify all 3 first bytes of SPI commands. I'm not sure why
I wasn't doing that, probably because I was getting a lot of AVR
err and thought that only 2 bytes of the cmd were echoed. But now,
with a reliable SPI setup, verifying 3 bytes seems to work.
master
Virgil Dupras 3 年之前
父節點
當前提交
eafcb0c440
共有 4 個文件被更改,包括 17 次插入4 次删除
  1. +2
    -2
      blk/160
  2. +6
    -0
      blk/163
  3. +7
    -0
      doc/avr.txt
  4. +2
    -2
      recipes/rc2014/avr.md

+ 2
- 2
blk/160 查看文件

@@ -1,4 +1,4 @@
( AVR Programmer, load range 160-162. doc/avr.txt )
( AVR Programmer, load range 160-163. doc/avr.txt )
( page size in words, 64 is default on atmega328P ) ( page size in words, 64 is default on atmega328P )
CREATE aspfpgsz 64 , CREATE aspfpgsz 64 ,
VARIABLE aspprevx VARIABLE aspprevx
@@ -6,7 +6,7 @@ VARIABLE aspprevx
: _xc ( a -- b ) DUP (spix) ( a b ) : _xc ( a -- b ) DUP (spix) ( a b )
DUP aspprevx @ = NOT IF ABORT" AVR err" THEN ( a b ) DUP aspprevx @ = NOT IF ABORT" AVR err" THEN ( a b )
SWAP aspprevx ! ( b ) ; SWAP aspprevx ! ( b ) ;
: _cmd ( b4 b3 b2 b1 -- r4 ) _xc DROP _x DROP _xc DROP _x ;
: _cmd ( b4 b3 b2 b1 -- r4 ) _xc DROP _xc DROP _xc DROP _x ;
: asprdy ( -- ) BEGIN 0 0 0 0xf0 _cmd 1 AND NOT UNTIL ; : asprdy ( -- ) BEGIN 0 0 0 0xf0 _cmd 1 AND NOT UNTIL ;
: asp$ ( spidevid -- ) : asp$ ( spidevid -- )
( RESET pulse ) DUP (spie) 0 (spie) (spie) ( RESET pulse ) DUP (spie) 0 (spie) (spie)


+ 6
- 0
blk/163 查看文件

@@ -0,0 +1,6 @@
: aspe@ ( addr -- byte, read from EEPROM )
0 SWAP 256 /MOD ( 0 lsb msb ) SWAP
0xa0 ( 0 msb lsb 0xa0 ) _cmd ;
: aspe! ( byte addr --, write to EEPROM )
256 /MOD ( b lsb msb ) SWAP
0xc0 ( b msb lsb 0xc0 ) _cmd DROP asprdy ;

+ 7
- 0
doc/avr.txt 查看文件

@@ -103,3 +103,10 @@ aspfb! that divides dst addr by 2 because AMOVEW use byte-based
addresses but aspfb! uses word-based ones. You also have to make addresses but aspfb! uses word-based ones. You also have to make
sure that A@* points to @ (or another word-based fetcher) sure that A@* points to @ (or another word-based fetcher)
instead of its default value of C@. instead of its default value of C@.

# Access EEPROM

Accessing EEPROM is simple and is done byte-by-byte with words
aspe@ and aspe!. Example:

0x42 0 aspe! 0 aspe@ .x ( prints 42 )

+ 2
- 2
recipes/rc2014/avr.md 查看文件

@@ -27,8 +27,8 @@ the "no division" position, and when I communicate with the
AVR chip, I move the switch to increase the divisor. AVR chip, I move the switch to increase the divisor.


Once you've done this, you can test that you can communicate Once you've done this, you can test that you can communicate
with your AVR chip by doing `160 162 LOADR` (turn off your
programmer or alse it might mess up the SPI bus and prevent you
with your AVR chip by doing `160 163 LOADR` (turn off your
programmer or else it might mess up the SPI bus and prevent you
from using your SD card) and then running: from using your SD card) and then running:


1 asp$ aspfl@ .x 0 (spie) 1 asp$ aspfl@ .x 0 (spie)


Loading…
取消
儲存