nimeni_altci Postat Octombrie 28, 2015 Partajează Postat Octombrie 28, 2015 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
Vezi Muti Postat Octombrie 28, 2015 Partajează Postat Octombrie 28, 2015 (editat) 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 Octombrie 28, 2015 de Vezi Muti Link spre comentariu
nimeni_altci Postat Octombrie 28, 2015 Autor Partajează Postat Octombrie 28, 2015 Aici e proiectul. Are mai multe configurari, si pentru alte intreruperi. Pinii folositi, sunt RC14 pentru RX si RG7 pt TX. luni3.rar Link spre comentariu
Vezi Muti Postat Octombrie 28, 2015 Partajează Postat Octombrie 28, 2015 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
nimeni_altci Postat Octombrie 28, 2015 Autor Partajează Postat Octombrie 28, 2015 (editat) 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 Octombrie 28, 2015 de nimeni_altci Link spre comentariu
Vezi Muti Postat Octombrie 28, 2015 Partajează Postat Octombrie 28, 2015 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
nimeni_altci Postat Octombrie 28, 2015 Autor Partajează Postat Octombrie 28, 2015 Robochallenge este concursul. Si nu cred ca fac o varza. Am facut remapare si dupa Sys_init(), si tot nu a mers, si am lasat asa. Daca te uiti in datasheet: http://ww1.microchip.com/downloads/en/DeviceDoc/60001191D.pdf, la pagina 243, arata ca prin scrierea valorii 1 in registrul RPG7R, faci pinul RG7 ca TX pt UART1. Link spre comentariu
sofian Postat Octombrie 28, 2015 Partajează Postat Octombrie 28, 2015 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
Vezi Muti Postat Octombrie 29, 2015 Partajează Postat Octombrie 29, 2015 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
Postări Recomandate
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 contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum