SW UART18xxx - vysledek
Michal HW
michalgregor@centrum.cz
Pátek Srpen 12 10:19:38 CEST 2005
Ten pic uz ma 2x HW UART...
Chtelo by to tak 4x...
Michal
----- Original Message -----
From: "Marek Pavlu" <pavlu@hwg.cz>
To: "'HW-news'" <hw-list@list.hw.cz>
Sent: Friday, August 12, 2005 1:19 AM
Subject: RE: SW UART18xxx - vysledek
Zdravim,
Jen trosku rypalska otazka.
Co je cilem projektu?
Ja bych se s tim, pokud neni VAZNY duvod vubec nepral.
Nebo toho budete delay milionovou serii, ze se Vam to vyplati?
Radsi tam vrazit PIC s HW UART.
S pozdravem,
Marek Pavlu
// -----Original Message-----
// From: hw-list-bounces@list.hw.cz [mailto:hw-list-bounces@list.hw.cz] On
// Behalf Of Michal HW
// Sent: Thursday, August 11, 2005 10:55 AM
// To: HW-News
// Subject: SW UART18xxx - vysledek
//
// Jak jsem jiz psal pokousim se optimalizovat SW UART. 1200Bd, 20MHz. Bezi
// v
// preruseni, nezavisle na hlavnim programu. Jedno preruseni trva kolem 30
// cyklu to je zatizeni procesoru 7%. Samotny prijem bere 14-16cyklu. Pocet
// cyklu jsem moc nesnizil, ale mam vyreseno i 3x vzorkovani vstupnich dat.
// Chci snizit pocet cyklu, kvuli vyssi rychlost.Nepriklad na 9600Bd SW UART
// bere 62% vykonu.
// (Odladeno pouze v MPLABU)
//
// Cas_RD1 res 1 ;pro seriový vstup
// RD1_Faze res 1 ;START/data/STOP
// RD1_Buf res 1 ;Právě přijímaný BYT
//
// RD1_Data res 1 ;Tady se ukláda přijmutý BYT
// RD1_Bity res 1 ;Vzorkování bitů
// ;*********************************************************
// Navrat_ISR macro
//
// incf RD1_Faze,F ;Dalsi fáze
//
// dcfsnz Cas_TD,F
// bra Vysilej
//
// movff PCLATH_Temp,PCLATH
// retfie FAST
//
// endm
// ;---------------------------------------------------------
// Vysli_Navrat_Zvys macro
//
// incf TD_Faze,F
// movff PCLATH_Temp,PCLATH
// retfie FAST
//
// endm
// ;*********************************************************
// ;*********************************************************
// Reset_Page code
// nop
// bcf INTCON,GIE
// goto Start
// ;*********************************************************
// ;Přerušení jen CCP1
// ;Po 520 cyklech a tedy 1200/8 (20M/ CPU(4)/ TMR1(520))
//
//
// ISR_Code code 0x16
// movff PCLATH,PCLATH_Temp
//
// bcf PIR1,CCP1IF
//
// clrf PCLATH
// rlncf RD1_Faze,W
// addwf PCL
//
// ;Start
// bra Cekej_Start
// bra Prijmi_Bit_Ini
// bra Prijmi_Bit
// bra Prijmi_Bit
// bra Prijmi_Bit
// bra Kontrola_Start
// bra Byt_Ini
//
// ;Bit0
// bra Konec_Prijmu
// bra Prijmi_Bit_Ini
// bra Prijmi_Bit
// bra Prijmi_Bit
// bra Prijmi_Bit
// bra Zapis_B0
// bra Konec_Prijmu
//
// ;Bit1
// bra Konec_Prijmu
// bra Prijmi_Bit_Ini
// bra Prijmi_Bit
// bra Prijmi_Bit
// bra Prijmi_Bit
// bra Zapis_B1
// bra Konec_Prijmu
//
// ;Bit2
// bra Konec_Prijmu
// bra Prijmi_Bit_Ini
// bra Prijmi_Bit
// bra Prijmi_Bit
// bra Prijmi_Bit
// bra Zapis_B2
// bra Konec_Prijmu
//
// ;Bit3
// bra Konec_Prijmu
// bra Prijmi_Bit_Ini
// bra Prijmi_Bit
// bra Prijmi_Bit
// bra Prijmi_Bit
// bra Zapis_B3
// bra Konec_Prijmu
//
// ;Bit4
// bra Konec_Prijmu
// bra Prijmi_Bit_Ini
// bra Prijmi_Bit
// bra Prijmi_Bit
// bra Prijmi_Bit
// bra Zapis_B4
// bra Konec_Prijmu
//
// ;Bit5
// bra Konec_Prijmu
// bra Prijmi_Bit_Ini
// bra Prijmi_Bit
// bra Prijmi_Bit
// bra Prijmi_Bit
// bra Zapis_B5
// bra Konec_Prijmu
//
// ;Bit6
// bra Konec_Prijmu
// bra Prijmi_Bit_Ini
// bra Prijmi_Bit
// bra Prijmi_Bit
// bra Prijmi_Bit
// bra Zapis_B6
// bra Konec_Prijmu
//
// ;Bit7
// bra Konec_Prijmu
// bra Prijmi_Bit_Ini
// bra Prijmi_Bit
// bra Prijmi_Bit
// bra Prijmi_Bit
// bra Zapis_B7
// bra Konec_Prijmu
//
// ;STOP
// bra Konec_Prijmu
// bra Prijmi_Bit_Ini
// bra Prijmi_Bit
// bra Prijmi_Bit
// bra Prijmi_Bit
// bra Kontrola_Stop
// bra Zapis_Byte
// ;---------------------------------------------------------
// Prijmi_Bit_Ini
// clrf RD1_Bity
//
// Navrat_ISR ;Macro
// ;---------------------------------------------------------
// Prijmi_Bit
// btfsc Data_In
// incf RD1_Bity,F ;3x se pocita vstupni hodnota
//
// Navrat_ISR ;Macro
// ;---------------------------------------------------------
// Byt_Ini
// clrf RD1_Buf
//
// Navrat_ISR ;Macro
// ;*********************************************************
// ;Spouštění vysilání
// ;vloženo do příjmu kvůli PCLATH
//
// Vysilej bsf Cas_TD,3 ;8
//
// rlncf TD_Faze,W
// addwf PCL
//
// bra Vysli_Cekej ;0
// bra Vysli_B0 ;2
// bra Vysli_B1 ;3
// bra Vysli_B2 ;4
// bra Vysli_B3 ;5
// bra Vysli_B4 ;6
// bra Vysli_B5 ;7
// bra Vysli_B6 ;8
// bra Vysli_B7 ;9
// bra Vysli_Stop ;10
// bra Vysli_Navrat_Ini ;11
// bra Vysli_Navrat_Ini ;12
// bra Vysli_Navrat_Ini ;13
// bra Vysli_Navrat_Ini ;14
// bra Vysli_Navrat_Ini ;15
// ;*********************************************************
// Konec_Prijmu
// Navrat_ISR
// ;---------------------------------------------------------
// ;Cekame na START bit
//
// Cekej_Start
// btfss Data_In ;Výsledek vzorkování
// incf RD1_Faze,F
//
// dcfsnz Cas_TD,F
// bra Vysilej
// movff PCLATH_Temp,PCLATH
// retfie FAST
// ;---------------------------------------------------------
// Kontrola_Start
// btfsc RD1_Bity,1 ;Výsledek vzorkování
// setf RD1_Faze
//
// Navrat_ISR
// ;---------------------------------------------------------------------
// Zapis_B0
// btfsc RD1_Bity,1 ;Výsledek vzorkování
// bsf RD1_Buf,0
// Navrat_ISR
// ;---------------------------------------------------------------------
// Zapis_B1
// btfsc RD1_Bity,1 ;Výsledek vzorkování
// bsf RD1_Buf,1
// Navrat_ISR
// ;---------------------------------------------------------------------
// Zapis_B2
// btfsc RD1_Bity,2 ;Výsledek vzorkování
// bsf RD1_Buf,2
// Navrat_ISR
// ;---------------------------------------------------------------------
// Zapis_B3
// btfsc RD1_Bity,3 ;Výsledek vzorkování
// bsf RD1_Buf,3
// Navrat_ISR
// ;---------------------------------------------------------------------
// Zapis_B4
// btfsc RD1_Bity,4 ;Výsledek vzorkování
// bsf RD1_Buf,4
// Navrat_ISR
// ;---------------------------------------------------------------------
// Zapis_B5
// btfsc RD1_Bity,5 ;Výsledek vzorkování
// bsf RD1_Buf,5
// Navrat_ISR
// ;---------------------------------------------------------------------
// Zapis_B6
// btfsc RD1_Bity,6 ;Výsledek vzorkování
// bsf RD1_Buf,6
// Navrat_ISR
// ;---------------------------------------------------------------------
// Zapis_B7
// btfsc RD1_Bity,7 ;Výsledek vzorkování
// bsf RD1_Buf,7
// Navrat_ISR
// ;---------------------------------------------------------
// Kontrola_Stop
// btfss RD1_Bity,1 ;Výsledek vzorkování
// setf RD1_Faze
//
// Navrat_ISR
// ;---------------------------------------------------------
// Zapis_Byte
// bcf Time_Out_Rx1 ;Přijat byt
// movlw K_CAS_BYT
// movwf Rx1_Cas_B
//
// movff RD1_Buf,RD1_Data
// bsf RD1_F
//
// clrf RD1_Faze
//
// dcfsnz Cas_TD,F
// bra Vysilej
// movff PCLATH_Temp,PCLATH
// retfie FAST
// ;*********************************************************
// ;Vysilani dat
// ;---------------------------------------------------------
// ;Nemá co vysílat, jsou nové data?
// ;(Nová data z TD_Buf přesunout do TD_Shift)
//
// Vysli_Cekej
// movff PCLATH_Temp,PCLATH
// btfsc TD_F
// retfie FAST
//
// bsf TD_F ;Prazdný Bufer
// bcf TD_Klid ;Vysiláme
// movff TD_Buf,TD_Shift
//
// ;START bit
// bcf Data_Out
// Vysli_Navrat_Zvys
// ;---------------------------------------------------------------------
// ;Datové bity
//
// Vysli_B0
// btfss TD_Shift,2
// bcf Data_Out
// btfsc TD_Shift,2
// bsf Data_Out
//
// Vysli_Navrat_Zvys
//
// Vysli_B1
// btfss TD_Shift,2
// bcf Data_Out
// btfsc TD_Shift,2
// bsf Data_Out
//
// Vysli_Navrat_Zvys
//
// Vysli_B2
// btfss TD_Shift,2
// bcf Data_Out
// btfsc TD_Shift,2
// bsf Data_Out
//
// Vysli_Navrat_Zvys
//
// Vysli_B3
// btfss TD_Shift,3
// bcf Data_Out
// btfsc TD_Shift,3
// bsf Data_Out
//
// Vysli_Navrat_Zvys
//
// Vysli_B4
// btfss TD_Shift,4
// bcf Data_Out
// btfsc TD_Shift,4
// bsf Data_Out
//
// Vysli_Navrat_Zvys
//
// Vysli_B5
// btfss TD_Shift,5
// bcf Data_Out
// btfsc TD_Shift,5
// bsf Data_Out
//
// Vysli_Navrat_Zvys
//
// Vysli_B6
// btfss TD_Shift,6
// bcf Data_Out
// btfsc TD_Shift,6
// bsf Data_Out
//
// Vysli_Navrat_Zvys
//
// Vysli_B7
// btfss TD_Shift,7
// bcf Data_Out
// btfsc TD_Shift,7
// bsf Data_Out
//
// Vysli_Navrat_Zvys
// ;---------------------------------------------------------------------
// ;Nové data se testují pouze na začátku vysílací rutiny,
// ;takže pro zjištění konce vysílání se musí zkusit oba bity TD_F a TD_Klid
//
// Vysli_Stop
// bsf Data_Out ;Stop bit
// bsf TD_Klid ;Nevysílá se
//
// ; bra Vysli_Navrat_Ini
// ;---------------------------------------------------------
// ;Navrat z ISR
//
// Vysli_Navrat_Ini
// clrf TD_Faze
//
// Vysli_Navrat
// movff PCLATH_Temp,PCLATH
// retfie FAST
// ;*********************************************************
//
// _______________________________________________
// HW-list mailing list - sponsored by www.HW.cz
// Hw-list@list.hw.cz
// http://list.hw.cz/mailman/listinfo/hw-list
---
avast! Antivirus: Odchozi zprava cista.
Virova databaze (VPS): 0532-3, 10/08/2005
Testovano: 11.8.2005 20:18:03
avast! (c) copyright 2000-2003 ALWIL Software.
http://www.avast.com
_______________________________________________
HW-list mailing list - sponsored by www.HW.cz
Hw-list@list.hw.cz
http://list.hw.cz/mailman/listinfo/hw-list
Další informace o konferenci Hw-list