내가 Attiny167의 uart를 통해 데이터를 얻으려고하는데, 전송 속도 57600에서 인터럽트 모드로 작동하지만, 내가 디버그 할 때만 수신합니다. CR
& LF
데이터가 수신되지 않습니다. 아래의 컨트롤러는 내 코드입니다.Atiny167 컨트롤러에서 Uart 문제
#define CPU_CLOCK_FREQ 8000000UL
#define SAMPLES_PER_BIT 8
#define BAUD_RATE 57600
ISR(LIN_TC_vect)
{
cli();
temp=LINDAT;
buff[i]=temp;
i++;
sei();
}
void USARTInit()
{
DDRA = 0x02; // Port A Rx/Tx as input/output for PIN0 and PIN1
/* Set PORTB as input from FACS MAin BOX on PIN0 and PIN1 , initially high */
DDRB = 0x00;
PORTB= 0xFF;
/* Set samples per bit and UART baud */
LINBTR = (1 << LDISR) | SAMPLES_PER_BIT;
LINBRR = (((CPU_CLOCK_FREQ)/SAMPLES_PER_BIT)/BAUD_RATE) - 1;
/* Configure LIN UART in UART mode */
LINCR = (1 << LENA) | (1 << LCMD0) | (1 << LCMD1) | (1 << LCMD2);
// enable transmit and recieve interrupts for LIN/UART transfer
LINENIR = (1 << LENRXOK);
sei();
}
도와주세요.
에서 내 경우에는 작동 클럭입니다 않았다가 아닌가 모든 마스크 가능한 자동 중단 인터럽트가 호출되면 CPU에 의해 차단됩니까? 저것은 마이크로 제어기가 보통 일하는 방법이다, 나는 AVR가 어떤 다른다고 믿지 않는다? – Lundin
전송 속도 불일치로 인해 CR/LF 만 수신 될 수 있습니다. 전송 속도 문제로 인해 CR 및 LF 만 수신 할 수 있습니다. 확인 : 주변 클럭이 8MHz의 2입니다 1. 경우에 당신은 당신이 정말로 LINDAT 레지스터를 읽어 0 3. 마스킹 비트 [15시 12분]와 LINBRR 레지스터 내로 짧은 INT (16 비트)를 작성하는 것이 unsigned char 변수 4. LIN_ERR_vect를 등록하고 주변 장치의 오류가 있는지 확인하십시오. – fisehara