BJ Freeman
09-03-02, 09:27 AM
I figured since I am a novice to Forth type languages I would start a thread on the learning process.
Once the staff get the Ver 3.0 checked out I am sure they will jump in also.
Once I get my IsoPod, I will see how much my paper attempt is valid.
Also Feel free to jump in with question(don't expect to answer them), answer (always much appreciated) , view points (different approaches to the same problem).
I found the IsoPod.pdf, to have more about programing than the IsoMax.pdf. The programming was more digital than analog.
As a head twist, I am taking an example from the Motorola application note on how to programm the DSP56F805 SPI to a DS1772, and then making it an IsoMax routine.
the application note is:
http://e-www.motorola.com/brdata/PDFDB/docs/BR1539.pdf
So I start with the DSP56F805 assembly
• The DS1722 is configured to provide continuous 12-bit temperature
conversions
— Change from default 9-bit conversions to 12-bit conversions
— Enable continuous conversion mode
; Temperature Read Code Snippetl
;Initialization Code Snippet
PEIENR EQU $0FF5 ; PORT E INTERRUPT ENABLE REGISTER
PEIAR EQU $0FF4 ; PORT E INTERRUPT ASSERT REGISTER
SPSCR EQU $0F20 ; SPI STATUS & CONTROL REGISTER
SPDSR EQU $0F21 ; SPI DATA SIZE REGISTER
PEPER EQU $0FF3 ; PORT E PERIPHERAL ENABLE REGISTER
PEDDR EQU $0FF2 ; PORT E DATA DIRECTION REGISTER
PEDR EQU $0FF1 ; PORT E DATA REGISTER
SPDTR EQU $0F23 ; SPI DATA TRASMIT REGISTER
INIT:
; CONFIGURE PORT E Bit-7
BFCLR #$0008,X:PEIENR ; DISABLE PORT E BIT-7 EXTERNAL INTERRUPTS
BFCLR #$0008,X:PEIAR ; DISABLE PORT E BIT-7 SW INTERRUPTS
BFCLR #$0008,X:PEPER ; CONFIGURE PORT E BIT-7 AS
GPIO BFSET #$0008,X:PEDDR ; SELECT PORT E BIT-7 AS AN OUTPUT
BFCLR #$0008,X:PEDR ; SET PORT E BIT-7 OUTPUT TO A LOW
; CONFIGURE SPI PORT
MOVEP #$0007,X:SPDSR ; TRANSMIT/RECEIVE 8-BIT LENGTH WORDS
MOVEP #$00DE,X:SPSCR ; CONFIGURE SPI PORT
; TRANSMIT/RECEIVE MSB FIRST
; DIVIDE DSP CLOCK BY 32, 40MHZ/32=1.25MHZ
; CPOL=1 ; CPHA=1 ; DISABLE ALL SPI INTERRUPTS
; ENABLE SPI ; CONFIGURE DS1722
BFSET #$0008,X:PEDR ; SET SPI BUS ENABLE LINE
BRCLR #$0020,X:SPSCR,* ; WAIT FOR TRANSMITTER BUFFER TO EMPTY
MOVEP #$0080,X:SPDTR ; OUTPUT ‘WRITE CONFIGURATION’ ADDRESS
BRCLR #$0020,X:SPSCR,* ; WAIT FOR TRANSMITTER BUFFER TO EMPTY
MOVEP #$00E8,X:SPDTR ; OUTPUT ‘DS1722 CONFIGURATION’ DATA
; 12-BIT CONVERSIONS ; ENABLE CONTINUOUS CONVERSIONS
BFCLR #$0008,X:PEDR ; RESET SPI BUS ENABLE LINE RTS
; demonstrates how to read a 12-bit temperature
;conversion value from the DS1722.
PEDR EQU $0FF1 ; PORT E DATA REGISTER
SPSCR EQU $0F20 ; SPI STATUS & CONTROL REGISTER
SPDRR EQU $0F22 ; SPI DATA RECEIVE REGISTER
SPDTR EQU $0F23 ; SPI DATA TRASMIT REGISTER
TEMP: ; READ A 12-BIT DS1722 TEMPERATURE SAMPLE
BFSET #$0008,X:PEDR ; SET SPI BUS ENABLE LINE
BRCLR #$0020,X:SPSCR,* ; WAIT FOR TRANSMITTER BUFFER TO EMPTY
MOVEP X:SPDRR,X1 ; READ ANY DUMMY DATA WHICH MAY EXIST
MOVEP #$0002,X:SPDTR ; OUTPUT ‘READ MSH OF TEMP DATA’ ADDRESS
BRCLR #$0020,X:SPSCR,* ; WAIT FOR TRANSMITTER BUFFER TO EMPTY
BRCLR #$2000,X:SPSCR,* ; WAIT FOR DUMMY INPUT DATA
MOVEP X:SPDRR,X1 ; READ OUT DUMMY DATA PROCEEDING GOOD DATA
MOVEP #$0001,X:SPDTR ; OUTPUT ‘READ LSH OF TEMP DATA’ ADDRESS
BRCLR #$0020,X:SPSCR,* ; WAIT FOR TRANSMITTER BUFFER TO EMPTY
; ALSO READ IN MSH OF TEMP DATA
BRCLR #$2000,X:SPSCR,* ; WAIT FOR MSH TEMP DATA MOVEP X:SPDRR,A1
; READ MSH TEMPERATURE DATA
REP #8 LSL A ; SHIFT TEMP VALUE TO MSH OF 16-BIT WORD
MOVEP #$0000,X:SPDTR ; OUTPUT DUMMY ADDRESS
BRCLR #$2000,X:SPSCR,* ; WAIT FOR LSH TEMP DATA
MOVEP X:SPDRR,X1 ; READ LSH TEMPERATURE DATA
OR X1,A ; COMBINE MSH AND LSH TO FORM 12-BIT TEMP
BFCLR #$0008,X:PEDR ; RESET SPI BUS ENABLE LINE
; TEMPERATURE VALUE RETURNED IN REGISTER A1
Being a novice The following code is not anywhere near correct, but is more to give me an outline and frame work to start from. Some is just thrown in as a place holder. As I learn, I hope to document some of my faild attempts as well as my trimuphs.
here is what I have roughed out so far:
MACHINE TEMPSENSORS
HEX
ON-MACHINE TEMPSENSORS
APPEND-STATE Init
APPEND-STATE Hightemp
APPEND-STATE lowTemp
APPEND-STATE highrateincr
APPEND-STATE highratedecr
APPEND-STATE gettemp
APPEND-STATE chckTemp
APPEND-STATE temperror
IN-STATE Init CONDITION True CAUSES gettemp THEN-STATE gettemp TO-HAPPEN
IN-STATE gettemp CONDITION True CAUSES chckTemp THEN-STATE gettemp TO-HAPPEN
IN-STATE chckTemp CONDITION True CAUSES <action> THEN-STATE gettemp TO-HAPPEN
IN-STATE Hightemp CONDITION True CAUSES temperror THEN-STATE gettemp TO-HAPPEN
IN-STATE lowTemp CONDITION True CAUSES temperror THEN-STATE gettemp TO-HAPPEN
IN-STATE highrateincr CONDITION True CAUSES temperror THEN-STATE gettemp TO-HAPPEN
IN-STATE highratedecr CONDITION True CAUSES temperror THEN-STATE gettemp TO-HAPPEN
IN-STATE temperror CONDITION True CAUSES <action> THEN-STATE <state> TO-HAPPEN
TEMPSENSORS SET-STATE EVERY 5000 CYCLES SCHEDULE-RUNS gettemp
DEFINE <name> TEST-MASK <mask> DATA-MASK <mask> AT-ADDRESS <address> FOR-INPUT
DEFINE <name> AND-MASK <mask> XOR-MASK <mask> AT-ADDRESS <address> FOR-OUTPUT
DEFINE <name> CLR-MASK <mask> SET-MASK <mask> AT-ADDRESS <address> FOR-OUTPUT
IS-INPUT
GETBYTE
SPI0 MASTER 16 BITS MSB-FIRST 5 MBAUD
SPI0 TX-SPI SPI0 RX-SPI
Once the staff get the Ver 3.0 checked out I am sure they will jump in also.
Once I get my IsoPod, I will see how much my paper attempt is valid.
Also Feel free to jump in with question(don't expect to answer them), answer (always much appreciated) , view points (different approaches to the same problem).
I found the IsoPod.pdf, to have more about programing than the IsoMax.pdf. The programming was more digital than analog.
As a head twist, I am taking an example from the Motorola application note on how to programm the DSP56F805 SPI to a DS1772, and then making it an IsoMax routine.
the application note is:
http://e-www.motorola.com/brdata/PDFDB/docs/BR1539.pdf
So I start with the DSP56F805 assembly
• The DS1722 is configured to provide continuous 12-bit temperature
conversions
— Change from default 9-bit conversions to 12-bit conversions
— Enable continuous conversion mode
; Temperature Read Code Snippetl
;Initialization Code Snippet
PEIENR EQU $0FF5 ; PORT E INTERRUPT ENABLE REGISTER
PEIAR EQU $0FF4 ; PORT E INTERRUPT ASSERT REGISTER
SPSCR EQU $0F20 ; SPI STATUS & CONTROL REGISTER
SPDSR EQU $0F21 ; SPI DATA SIZE REGISTER
PEPER EQU $0FF3 ; PORT E PERIPHERAL ENABLE REGISTER
PEDDR EQU $0FF2 ; PORT E DATA DIRECTION REGISTER
PEDR EQU $0FF1 ; PORT E DATA REGISTER
SPDTR EQU $0F23 ; SPI DATA TRASMIT REGISTER
INIT:
; CONFIGURE PORT E Bit-7
BFCLR #$0008,X:PEIENR ; DISABLE PORT E BIT-7 EXTERNAL INTERRUPTS
BFCLR #$0008,X:PEIAR ; DISABLE PORT E BIT-7 SW INTERRUPTS
BFCLR #$0008,X:PEPER ; CONFIGURE PORT E BIT-7 AS
GPIO BFSET #$0008,X:PEDDR ; SELECT PORT E BIT-7 AS AN OUTPUT
BFCLR #$0008,X:PEDR ; SET PORT E BIT-7 OUTPUT TO A LOW
; CONFIGURE SPI PORT
MOVEP #$0007,X:SPDSR ; TRANSMIT/RECEIVE 8-BIT LENGTH WORDS
MOVEP #$00DE,X:SPSCR ; CONFIGURE SPI PORT
; TRANSMIT/RECEIVE MSB FIRST
; DIVIDE DSP CLOCK BY 32, 40MHZ/32=1.25MHZ
; CPOL=1 ; CPHA=1 ; DISABLE ALL SPI INTERRUPTS
; ENABLE SPI ; CONFIGURE DS1722
BFSET #$0008,X:PEDR ; SET SPI BUS ENABLE LINE
BRCLR #$0020,X:SPSCR,* ; WAIT FOR TRANSMITTER BUFFER TO EMPTY
MOVEP #$0080,X:SPDTR ; OUTPUT ‘WRITE CONFIGURATION’ ADDRESS
BRCLR #$0020,X:SPSCR,* ; WAIT FOR TRANSMITTER BUFFER TO EMPTY
MOVEP #$00E8,X:SPDTR ; OUTPUT ‘DS1722 CONFIGURATION’ DATA
; 12-BIT CONVERSIONS ; ENABLE CONTINUOUS CONVERSIONS
BFCLR #$0008,X:PEDR ; RESET SPI BUS ENABLE LINE RTS
; demonstrates how to read a 12-bit temperature
;conversion value from the DS1722.
PEDR EQU $0FF1 ; PORT E DATA REGISTER
SPSCR EQU $0F20 ; SPI STATUS & CONTROL REGISTER
SPDRR EQU $0F22 ; SPI DATA RECEIVE REGISTER
SPDTR EQU $0F23 ; SPI DATA TRASMIT REGISTER
TEMP: ; READ A 12-BIT DS1722 TEMPERATURE SAMPLE
BFSET #$0008,X:PEDR ; SET SPI BUS ENABLE LINE
BRCLR #$0020,X:SPSCR,* ; WAIT FOR TRANSMITTER BUFFER TO EMPTY
MOVEP X:SPDRR,X1 ; READ ANY DUMMY DATA WHICH MAY EXIST
MOVEP #$0002,X:SPDTR ; OUTPUT ‘READ MSH OF TEMP DATA’ ADDRESS
BRCLR #$0020,X:SPSCR,* ; WAIT FOR TRANSMITTER BUFFER TO EMPTY
BRCLR #$2000,X:SPSCR,* ; WAIT FOR DUMMY INPUT DATA
MOVEP X:SPDRR,X1 ; READ OUT DUMMY DATA PROCEEDING GOOD DATA
MOVEP #$0001,X:SPDTR ; OUTPUT ‘READ LSH OF TEMP DATA’ ADDRESS
BRCLR #$0020,X:SPSCR,* ; WAIT FOR TRANSMITTER BUFFER TO EMPTY
; ALSO READ IN MSH OF TEMP DATA
BRCLR #$2000,X:SPSCR,* ; WAIT FOR MSH TEMP DATA MOVEP X:SPDRR,A1
; READ MSH TEMPERATURE DATA
REP #8 LSL A ; SHIFT TEMP VALUE TO MSH OF 16-BIT WORD
MOVEP #$0000,X:SPDTR ; OUTPUT DUMMY ADDRESS
BRCLR #$2000,X:SPSCR,* ; WAIT FOR LSH TEMP DATA
MOVEP X:SPDRR,X1 ; READ LSH TEMPERATURE DATA
OR X1,A ; COMBINE MSH AND LSH TO FORM 12-BIT TEMP
BFCLR #$0008,X:PEDR ; RESET SPI BUS ENABLE LINE
; TEMPERATURE VALUE RETURNED IN REGISTER A1
Being a novice The following code is not anywhere near correct, but is more to give me an outline and frame work to start from. Some is just thrown in as a place holder. As I learn, I hope to document some of my faild attempts as well as my trimuphs.
here is what I have roughed out so far:
MACHINE TEMPSENSORS
HEX
ON-MACHINE TEMPSENSORS
APPEND-STATE Init
APPEND-STATE Hightemp
APPEND-STATE lowTemp
APPEND-STATE highrateincr
APPEND-STATE highratedecr
APPEND-STATE gettemp
APPEND-STATE chckTemp
APPEND-STATE temperror
IN-STATE Init CONDITION True CAUSES gettemp THEN-STATE gettemp TO-HAPPEN
IN-STATE gettemp CONDITION True CAUSES chckTemp THEN-STATE gettemp TO-HAPPEN
IN-STATE chckTemp CONDITION True CAUSES <action> THEN-STATE gettemp TO-HAPPEN
IN-STATE Hightemp CONDITION True CAUSES temperror THEN-STATE gettemp TO-HAPPEN
IN-STATE lowTemp CONDITION True CAUSES temperror THEN-STATE gettemp TO-HAPPEN
IN-STATE highrateincr CONDITION True CAUSES temperror THEN-STATE gettemp TO-HAPPEN
IN-STATE highratedecr CONDITION True CAUSES temperror THEN-STATE gettemp TO-HAPPEN
IN-STATE temperror CONDITION True CAUSES <action> THEN-STATE <state> TO-HAPPEN
TEMPSENSORS SET-STATE EVERY 5000 CYCLES SCHEDULE-RUNS gettemp
DEFINE <name> TEST-MASK <mask> DATA-MASK <mask> AT-ADDRESS <address> FOR-INPUT
DEFINE <name> AND-MASK <mask> XOR-MASK <mask> AT-ADDRESS <address> FOR-OUTPUT
DEFINE <name> CLR-MASK <mask> SET-MASK <mask> AT-ADDRESS <address> FOR-OUTPUT
IS-INPUT
GETBYTE
SPI0 MASTER 16 BITS MSB-FIRST 5 MBAUD
SPI0 TX-SPI SPI0 RX-SPI