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