Re: PIC16F15225 a synchronní sériový port

Jindrich Fucik FULDA na seznam.cz
Pondělí Duben 29 16:35:42 CEST 2024


Ahoj,

obávám se, že tady se nám sešlo "flush" a "reset". Flush se používá pro vyčtení všech dat, ale to není můj případ. Tedy není to nic co by mne trápilo. Já potřebuji reset, který řekne, že to co přijde od teď tak bude určitě bit 0 od dalšího bajtu. A pokud máš něco v posuvném registru, tak to zahoď, nebo i klidně odevzdej, ale už v tom nepokračuj, protože tohle prostě bude nový začátek.

Mimochodem - ve světě SPI je tohle vyřešeno použitím vstupu "Enable" nebo "Select" nebo tak. Ale bohužel SPI má obrácené pořadí bitů. A je docela zvláštní, že na sériovce to není nějak řešené. Asi se špatně koukám nebo co.

---------- Původní e-mail ----------
Od: Pavel Hudeček <edizon na seznam.cz>
Komu: hw-list na list.hw.cz
Datum: 28. 4. 2024 22:54:12
Předmět: Re: PIC16F15225 a synchronní sériový port

    Mám téměř 0 zkušeností s PIC, ale na AVR, starých od Armelu, i
    nových od Microchipu, jde flush udělat tak, že se dokola čte datový
    registr, dokud nezmizí příznak dokončení předchozího příjmu.

    Flushing the Receive Buffer

    If the RX buffer has to be flushed during normal operation,
    repeatedly read the DATA location (USARTn.RXDATAH
    and USARTn.RXDATAL registers) until the Receive Complete Interrupt
    Flag (the RXCIF bit in the
    USARTn.RXDATAH register) is cleared.

    Ale trochu se obávám, že to platí jen pro async. Pak by to asi
    vyžadovalo si tam ty clocky nějak vyrobit, třeba přepnout na async s
    dostatečně vysokým baudrate:-)

    

    Na starých v ATmega v DS doporučovali i disable/enable, na těch
    nových od Microchipu už ne. Tak bych Microchip PIC zkusil to čtení.

    

    PH

    

    Dne 28.04.2024 v 22:21 Jindrich Fucik
      napsal(a):

    

    Ahoj,
      

      

      mám takový problém, kterému moc nerozumím.
      

      Mám synchronní sériovou komunikaci, ve které jsem slave. Master
      generuje clock i data. Protokol je takový, že běží komunikace,
      clock je generovaný v rozsahu 10 až 500 µs. Občas ale udělá pauzu
      delší než 8 ms a podle toho slave pozná, že tady začíná nový bajt
      a má začít odpočítávat začátek.
      

      Komunikaci čtu pomocí USART v režimu sync a continuous receiver,
      pauzu delší než 8ms čtu pomocí Timer 2 s externím resetem
      nastaveným na clock, to funguje správně.
      

      

      A teď můj problém - nevím jak vyresetovat ten USART, respektive
      jak mu říci, že má zahodit co doposud nasbíral do posuvného
      registru a má začít znovu. Myslel jsem, že bude stačit shodit SPEN
      (disable serial port) a pak jej zase nahodit (enable serial port).
      To ale evidentně nefunguje.
      

      Nezná někdo nějakou chytřejší metodu?
      

    
  

_______________________________________________

HW-list mailing list  -  sponsored by www.HW.cz

Hw-list na list.hw.cz

http://list.hw.cz/mailman/listinfo/hw-list



Další informace o konferenci Hw-list