Отговори на тема  [ 5 мнения ] 
dsPIC- UART problem 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Май 29, 2007 2:23 pm
Мнения: 3714
Местоположение: Високо в планината
Мнение 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);
}

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


Пет Яну 04, 2008 6:52 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Май 29, 2007 2:23 pm
Мнения: 3714
Местоположение: Високо в планината
Мнение 
ето какво пише в даташита:
Цитат:
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;}
   }


Пет Яну 04, 2008 7:34 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 24, 2005 11:41 pm
Мнения: 1049
Местоположение: Pz
Мнение 
И защо ги чистиш тези флагове, като са read only !?


Пет Яну 04, 2008 7:44 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6094
Мнение 
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]

_________________
main[-1u]={1};


Пет Яну 04, 2008 8:07 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6094
Мнение 
спокойно можеш да ползваш

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

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

_________________
main[-1u]={1};


Пет Яну 04, 2008 10:34 pm
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 5 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 3 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни