SW UART18xxx - vysledek

Marek Pavlu pavlu@hwg.cz
Pátek Srpen 12 01:19:34 CEST 2005


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







Další informace o konferenci Hw-list