From: ian Date: Sat, 26 Nov 2005 16:45:17 +0000 (+0000) Subject: support 5MHz and <=3.9MHz clocks for slave morse T0; proper error handling for unknow... X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ijackson/git?a=commitdiff_plain;h=0da2569dfd3fe0cf5a1f563dfd0942f394bf9cee;p=trains.git support 5MHz and <=3.9MHz clocks for slave morse T0; proper error handling for unknown clocks; delete obsolete delay_... settings --- diff --git a/iwjpictest/clockvaries.inc b/iwjpictest/clockvaries.inc index 007eaa8..2a5cfaa 100644 --- a/iwjpictest/clockvaries.inc +++ b/iwjpictest/clockvaries.inc @@ -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