Sari la conținut
ELFORUM - Forumul electronistilor

PIC32MZ UART nu primeste


nimeni_altci

Postări Recomandate

Salutare,

 

Am o mare problema in legatura cu perifericul de UART de la PIC32MZ2048ECH100. Efectiv pot sa trimit absolut orice, dar nu pot sa primesc nimic. Am stat peste 12 ore pe acasta problema si nu o pot rezolva. Am remapat bine pinii, i-am facut intrare, respectiv iesire, si se pare ca doar transmisia catre PC merge, invers nu. Am pus si sonda de osciloscop pe pinul uC, si ajunge ce trebuie, doar ca pinul nu vede. Nu citeste absolut nimic. Daca este necesar pot sa urc si codul. Va rog sa ma ajutati. Am un concurs sambata si trebuie sa termin pana atunci.

 

Multumesc!

Link spre comentariu
  • Răspunsuri 8
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • nimeni_altci

    4

  • Vezi Muti

    4

  • sofian

    1

Top autori în acest subiect

Te mancat undeva cu pic32MZ ? sau a fost impus ?

Pune codul.

Eu nu mai stau prea mult in seara asta.

Stai linistit , o resolvam pana sambata.

mplam + harmony , nu?

Editat de Vezi Muti
Link spre comentariu
void SYS_PORTS_Initialize(void){         /* PORT C Initialization */    PLIB_PORTS_OpenDrainEnable(PORTS_ID_0, PORT_CHANNEL_C, SYS_PORT_C_ODC);    PLIB_PORTS_Write( PORTS_ID_0, PORT_CHANNEL_C,  SYS_PORT_C_LAT);    PLIB_PORTS_DirectionOutputSet( PORTS_ID_0, PORT_CHANNEL_C,  SYS_PORT_C_TRIS ^ 0xFFFF);    PLIB_PORTS_ChangeNoticePerPortTurnOn(PORTS_ID_0, PORT_CHANNEL_C);    PLIB_PORTS_ChannelModeSelect(PORTS_ID_0, PORT_CHANNEL_C, SYS_PORT_C_ANSEL ^ 0xFFFF, PORTS_PIN_MODE_DIGITAL);    PLIB_PORTS_ChannelChangeNoticeEnable(PORTS_ID_0, PORT_CHANNEL_C, SYS_PORT_C_CNEN);    PLIB_PORTS_ChannelChangeNoticePullUpEnable(PORTS_ID_0, PORT_CHANNEL_C, SYS_PORT_C_CNPU);    PLIB_PORTS_ChannelChangeNoticePullDownEnable(PORTS_ID_0, PORT_CHANNEL_C, SYS_PORT_C_CNPD);    /* PPS Input Remapping */PLIB_PORTS_RemapInput(PORTS_ID_0, INPUT_FUNC_U1RX, INPUT_PIN_RPC14);    /* PPS Output Remapping */    }

ai zis ca ai facut remapare pini.

mai sus nu apare decat ca RC14 = U1RX.

teoretic, trebuia sa mearga numai receptia...

 

esti sigur ca ai idee ce insemana sa te apuci de un PIC32MZ ?

Link spre comentariu

E si transmisia facuta, dar e facuta in main. Doar ca e facuta fara functie PLIB, e facuta standard prin scriere in registru : RPG7R=0b0001;

Editat de nimeni_altci
Link spre comentariu

acum am vazut aberatiile alea din main().

OPRESTE-TE. esti pe calea gresita.

faci remapare si apoi apelezi SYS_init() care, printre altele :), ignora ce ai scris mai sus

si face numai ce ziceam eu: RC14=UART1 RX.

 

este o mare varza acolo.

 

ps: care este concursul pe care-l pierzi daca nu reusesti ?

Link spre comentariu
		    if(!DRV_USART0_ReceiverBufferIsEmpty) {			   			  gg=   PLIB_USART_ReceiverByteReceive(USART_ID_1);	   if( PLIB_USART_TransmitterIsEmpty(USART_ID_1)){		   send(x);		 //  for(c=0;c<320000000; c++);	    		 	  	    }	    }

DRV_USART0 este acelasi chestie cu USART_ID_1 ???

 

codul trebuie scris organizat ca sa intelegi si luna viitoare

if(!DRV_USART0_ReceiverBufferIsEmpty) {    gg = PLIB_USART_ReceiverByteReceive(USART_ID_1);    while( PLIB_USART_TransmitterIsEmpty(USART_ID_1)) {        send(gg);    }}
Link spre comentariu

daca vrei sa intelegi ceva din programul ala, fa cum zic:

scoate din main() remaparea pentru UART si pune-o acolo unde-i este locul:

 
1.
sys_ports_static.c, in functia SYS_PORTS_Initialize()
adauga:
 
    /* PPS Output Remapping */
    PLIB_PORTS_RemapOutput(PORTS_ID_0, OUTPUT_FUNC_U1TX, OUTPUT_PIN_RPG7 );
 
2.
system_interrupt.c, pune un break-point in intreruperea
    __ISR(_UART1_RX_VECTOR, ipl1AUTO)
pe linia fff='a';
 
dai drumul in debuger, trimite un char de la PC si vezi daca este atins acest break
 
(banuiesc ca MAX-ul cu care te legi la PC este conectat corect)
 
 
 
Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări