도와주세요!!
글 수 15,339
2006.12.07 09:47:34 (*.71.81.70)
6765
현재 EZ-X5에서 호기심에 부트로더 작성하고 있는데,
STUART의 인터럽트가 발생하지 않네요.
같은 코드에서 OS Timer 인터럽트는 잘 발생하는데...
아래는 uart 초기화 함수 이구요...
별 다른거 없습니다. 있는 소스에 RX interrupt만 enable 시킨거에요.
void serial_init(unsigned long baudrate)
{
unsigned int rate = UART_CLOCK/(16*baudrate);
CKEN |= CKEN5_STUART;
STFCR = 0; /* disable TX/RX FIFO */
/* set baud rate */
STLCR = LCR_DLAB; /* DLAB on */
STDLL = rate & 0xFF;
STDLH = rate >> 8;
STLCR = LCR_WLS0 | LCR_WLS1;
/* enable and reset TX/RX FIFO(1-byte rx threshold FIFO) */
STFCR |= FCR_TRFIFOE|FCR_RESETRF|FCR_RESETTF;
STLCR &= ~LCR_DLAB; /* DLAB off */
STIER = IER_UUE | IER_RAVIE; /* enable UART, RX interrupt */
ICMR = 0xFFFFFFFF;
}
아래는 LSR의 DR bit이 활성화 될 때(STLSR & LSR_DR) 프린트 한 겁니다..
STIER=41, STLSR=21, STIIR=c4, ICIP=0, ICMR=ffffff80, ICPR=0
[
STIER=41 => 0x40:uart enabled,
0x01:Receiver Data Available Interrupt Enable.
STLSR=21 => 0x20:Transmit FIFO has half or less than half data,
0x01:Data is available in RBR or the FIFO
STIIR=c4 => 0xc0:FIFO mode is selected
0x04:Received Data Available
ICIP=0 => IRQ Pending Register
ICMR=FFFFFF80
ICPR=0 => no interrupt pending
(위에 data는 있는데.. 왜 ICPR은 세팅이 안되어 있는지...???????)
]
CPSR은 interrupt가 enable되어 있구요.....
OS timer interrupt는 정확히 발생하구요....
무엇이 빠져 있는지....
리눅스 소스보고 그 순서 그대로 재 편성 해봐도 STUART TX/RX 인터럽트가 안뜨네요.
(라인 상태 인터럽트등 그외의 인터럽트들은 설정 안했음)
아시는분 답변 부탁 드려요~
STUART의 인터럽트가 발생하지 않네요.
같은 코드에서 OS Timer 인터럽트는 잘 발생하는데...
아래는 uart 초기화 함수 이구요...
별 다른거 없습니다. 있는 소스에 RX interrupt만 enable 시킨거에요.
void serial_init(unsigned long baudrate)
{
unsigned int rate = UART_CLOCK/(16*baudrate);
CKEN |= CKEN5_STUART;
STFCR = 0; /* disable TX/RX FIFO */
/* set baud rate */
STLCR = LCR_DLAB; /* DLAB on */
STDLL = rate & 0xFF;
STDLH = rate >> 8;
STLCR = LCR_WLS0 | LCR_WLS1;
/* enable and reset TX/RX FIFO(1-byte rx threshold FIFO) */
STFCR |= FCR_TRFIFOE|FCR_RESETRF|FCR_RESETTF;
STLCR &= ~LCR_DLAB; /* DLAB off */
STIER = IER_UUE | IER_RAVIE; /* enable UART, RX interrupt */
ICMR = 0xFFFFFFFF;
}
아래는 LSR의 DR bit이 활성화 될 때(STLSR & LSR_DR) 프린트 한 겁니다..
STIER=41, STLSR=21, STIIR=c4, ICIP=0, ICMR=ffffff80, ICPR=0
[
STIER=41 => 0x40:uart enabled,
0x01:Receiver Data Available Interrupt Enable.
STLSR=21 => 0x20:Transmit FIFO has half or less than half data,
0x01:Data is available in RBR or the FIFO
STIIR=c4 => 0xc0:FIFO mode is selected
0x04:Received Data Available
ICIP=0 => IRQ Pending Register
ICMR=FFFFFF80
ICPR=0 => no interrupt pending
(위에 data는 있는데.. 왜 ICPR은 세팅이 안되어 있는지...???????)
]
CPSR은 interrupt가 enable되어 있구요.....
OS timer interrupt는 정확히 발생하구요....
무엇이 빠져 있는지....
리눅스 소스보고 그 순서 그대로 재 편성 해봐도 STUART TX/RX 인터럽트가 안뜨네요.
(라인 상태 인터럽트등 그외의 인터럽트들은 설정 안했음)
아시는분 답변 부탁 드려요~
polling하여 STRBR을 읽으면 정확하게 읽히네요...