Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

dsPIC- UART problem
http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=5276
Страница 1 от 1

Автор:  dan [ Пет Яну 04, 2008 6:52 pm ]
Заглавие:  dsPIC- UART problem

Здравейте!
Опитвам се данни, приети по УАРТ, да ги изпращам по SPI. Проблемът ми е, че каквото и да направя, реда от програмата
Код:
while(!DataRdyUART1());
винаги се прескача. Ето го и съответния код
Код:
#define __dsPIC30F6014A__
#include<p30f6014a.h>
#include<spi.h>
#include<uart.h>
#include<string.h>

_FOSC(CSW_FSCM_OFF & XT_PLL16);   /* 4MHz Crystal with PLLx16 = 16 MIP */
_FWDT(WDT_OFF);                 /* Watch dog Timer OFF                               */
_FBORPOR(PBOR_OFF & MCLR_EN);   /* Brown Out OFF, MCLR Enabled                       */
_FGS(CODE_PROT_OFF);            /* Code Protect OFF                                  */
void main(void){

int i,ii, baudvalue,U1MODEvalue,U1STAvalue;
int short duma;
TRISG=0;

//configuraciq na Bletooth-a
baudvalue =103;
U1MODEvalue = UART_EN & UART_IDLE_CON &
UART_EN_WAKE & UART_DIS_LOOPBACK &
UART_DIS_ABAUD & UART_NO_PAR_8BIT &
UART_1STOPBIT;
U1STAvalue = UART_TX_INT_DIS &
UART_TX_PIN_NORMAL &
UART_TX_ENABLE & UART_INT_RX_CHAR &
UART_ADR_DETECT_DIS &
UART_RX_OVERRUN_CLEAR;
OpenUART1(U1MODEvalue, U1STAvalue, baudvalue);


while(1){
LATG=4;
U1STAbits.URXDA=0;//flag za gotovi prieti danni
while(!DataRdyUART1());
LATG=5;
duma=ReadUART1();
WriteSPI1(duma);
}

Някой има ли идея на какво може да се дължи това?

Автор:  dan [ Пет Яну 04, 2008 7:34 pm ]
Заглавие: 

ето какво пише в даташита:
Цитат:
If the break is longer than 13 bit times, the reception is
considered complete after the number of bit times
specified by PDSEL and STSEL. The URXDA bit is set,
FERR is set, zeros are loaded into the receive FIFO,
interrupts are generated if appropriate and the RIDLE
bit is set.
добавих проверка за грешка и на FERR бита
Код:
while(!DataRdyUART1() || U1STAbits.FERR==1);
, но сега пък не приема въобще. И флаговете чистя ръчно:
Код:
while(!DataRdyUART1() || U1STAbits.FERR==1){
   if(U1STAbits.FERR==1){
      U1STAbits.FERR=0;
      U1STAbits.URXDA=0;}
   }

Автор:  Gogo [ Пет Яну 04, 2008 7:44 pm ]
Заглавие: 

И защо ги чистиш тези флагове, като са read only !?

Автор:  TheWizard [ Пет Яну 04, 2008 8:07 pm ]
Заглавие: 

Return Value
[b]If ‘1’ is returned, it indicates that the receive buffer has a data to be read.[/b]

If ‘0’ is returned, it indicates that receive buffer does not have any new data to be read.

Remarks:
This function returns the status of the UART receive buffer. This indicates if the UART receive buffer contains any new data that is yet to be read as indicated by the UxSTA<URXDA> bit.

Source File:
DataRdyUART1.c

DataRdyUART2.c

Code Example

[b] while(DataRdyUART1());[/b]

Автор:  TheWizard [ Пет Яну 04, 2008 10:34 pm ]
Заглавие: 

спокойно можеш да ползваш

while( ! IFS0bits.U1RXIF );
....
IFS0bits.U1RXIF = 0;

за да чакаш събитие от RX

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/