chiark / gitweb /
support 5MHz and <=3.9MHz clocks for slave morse T0; proper error handling for unknow...
authorian <ian>
Sat, 26 Nov 2005 16:45:17 +0000 (16:45 +0000)
committerian <ian>
Sat, 26 Nov 2005 16:45:17 +0000 (16:45 +0000)
iwjpictest/clockvaries.inc

index 007eaa8f347074387624299ce2c8d933741ab504..2a5cfaaa468d101dfb1985e86c9118132d33ced4 100644 (file)
@@ -25,6 +25,10 @@ bsc_txsta_brgh macro
  endm
 
 movlw_movwf_spbrg macro
+ if serial_spbrg > 0
+ else
+  error "unsupported clock speed (serial_spbrg)"
+ endif
        movlw   serial_spbrg
        movwf   SPBRG,0
        endm
@@ -48,16 +52,20 @@ morse_t0setup macro clock, t0con_other, lcount, hcount
  local t0scale
  local t0cycles
  if clock==20000 ; Fosc=20MHz, Fcy=5MHz ie 200ns
-t0scale equ 0011b ; 1:8 => 1.6us
+t0scale equ 0010b ; 1:8 => 1.6us
 t0cycles equ 41250 ; * 1.6us = 66ms
  endif
- if clock==2000 ; Fosc=2MHz ie 500ns, Fcy=2us
-t0scale equ 1000b ; do not use prescaler
-t0cycles equ 33000 ; * 2us = 66ms
+ if clock==5000 ; Fosc=5MHz ie 200ns, Fcy=800ns
+t0scale equ 0000b ; 1:2 => 1.6us
+t0cycles equ 41250 ; * 1.6us = 66ms
  endif
- if clock==1000 ; Fosc=1MHz ie 1us, Fcy=4us
-t0scale equ 1000b ; do not use prescaler
-t0cycles equ 16500 ; * 4us = 66ms
+ if clock<=3900
+t0scale equ 1000b ; do not use prescaler ; cycle is 4/clock ms
+t0cycles equ (33 * clock) / 2 ; (4/clock) * (33*clock)/2 = 2*33 = 66ms
+ endif
+ if t0cycles > 0
+ else
+  error "unsupported clock speed (t0cycles)"
  endif
        movlw   t0con_other | t0scale
        movwf   T0CON
@@ -67,22 +75,13 @@ t0cycles equ 16500 ; * 4us = 66ms
  endif
  if lcount>=0
        movlw   (65535-t0cycles) & 0xff
-       movwf   hcount
+       movwf   lcount
  endif
        endm
 
 ;----------------------------------------------------------------------
 ; busy-wait delay loop, originally from flasher.asm
 
- if clock==20000 ; each cycle 0.2us
-delay_fastloop         equ     1       ; each medium loop = ~40ms
-delay_slowexp          equ     2       ; 2^2 * 40ms = 160ms
- endif
- if clock==1000 ; each cycle 4us
-delay_fastloop         equ     0       ; each medium loop = ~3ms
-delay_slowexp          equ     6       ; 2^6 * 3ms = 192ms
- endif
-
 implement_busywait_delay macro tclock
 
 ; we always leave each loop when its counter has reached 0, so on