2014-12-12 3 views
-1

uC LPC2478을 사용하고 있습니다. 나는 함수 UART0에서 일하고있다. 하지만 UART0 기능을 만들어야합니다. 인터럽트 사용 방법에 대해 잘 모릅니다!UART0을 통한 송수신 인터럽트 작성 방법

긴 문자열을 보내려고하면 긴 문자열을 받아야합니다. 하지만 작동하지 않습니다. 하지만 함수를 작성해야합니까? __irq void isr_UART0 (void) ???

>  void initUART0 (void) 
    >  { 
    >  PCONP |= (1 << 3);     /* Enable UART0 power    */ 
    >  
    >  PINSEL0 &= ~0x000000F0; 
    >  PINSEL0 |= 0x00000050; 
    >  
    >  U0FDR = 0;       /* Fractional divider not used  */ 
    >  U0LCR = 0x83;      /* 8 bits, no Parity, 1 Stop bit  */ 
    >  U0DLL = 10;       /* 115200 Baud Rate @ 12MHz PCLK Clock */ 
    >  
    >  U0DLM = 0; 
    >  U0LCR = 0x03;      /* DLAB = 0       */ 
    >  
    >  U0IER = 0; 
    >  
    >  VICVectAddr6 = (U32)isr_UART0;  /* Set Interrupt Vector    */ 
    >  VICVectCntl6 = 15;     /* use it for UART1 Interrupt   */ 
    >  VICIntEnable = (1 << 6);   /* Enable Interrupt     */ 
    >  
    >  U0IER = 0x03; 
    >  } 
    > 
    >  void sendToUART0 (char *data, int len) 
    >  { 
    >  int i; 
    >  
    >  while (!(U0LSR & (1 << 5))); 
    >  for (i = 0; i < len; i++) 
    >  { 
    >   U0THR = *data; 
    >   data++; 
    >  } 
    >  } 
    > 
    >  void readDataAtUART0 (char *ch) { 
    >  //while (!(U0LSR & 0x01)); 
    >  while (!(U0LSR & (1 << 0))); 
    >  *ch = U0RBR; 
    >  } 
    > 
    >  /* UART1 receive ISR 
    >  ******************************************************** */ 
    >  __irq void isr_UART0 (void) {  
    >  // readDataAtUART0(); 
    > 
    >    // read and assign the received data 
      VICVectAddr = 0;    /* Acknowledge Interrupt */ 
    >  } 

답변

0

'하지만 작동하지 않습니다.'문제의 매우 불편한 설명이므로 어쨌든 -1입니다.

'readDataAtUART0();' 'void readDataAtUART0 (char * ch)'의 서명과 일치하지 않으므로이 코드는 컴파일되지 않습니다. 인터럽트 처리기에는 프로세스 또는 스레드 컨텍스트가 없으므로 처리기가 통신 할 수 있도록 적어도 하나 이상의 전역 변수에 의존해야합니다. 예를 들어 배열 포인터.

TX 인터럽트는 U0THR이 전송할 첫 번째 문자로 '초벌링'을 필요로하기 때문에 조금 더 어색합니다. 이것은 어색 할 수 있습니다. U0THR이 이전 버퍼 내용의 마지막 문자가 비 었는지 확인하기 위해 TX 인터럽트를 비활성화해야합니다.

그냥 코드를 컴파일하고 rx 처리기가 먼저 작동하도록하십시오.

+0

Hello Martin, 죄송합니다.이 함수의 readDataAtUART0()은 주석입니다 (//). 나는 쓰는 것을 잊었다. 하지만 첫 번째 문제는 U0RBR을 수신하는 동안 한 문자를 얻고 마지막 문자 (문자열)까지 다음 문자를 다시 얻는 코드를 작성하는 방법입니다. 그리고 rx 처리기를 가져 오라고했는데 어떻게해야합니까? – kamran

관련 문제