Мигающие светодиоды TM4C1294XL в двоичном формате - PullRequest
0 голосов
/ 30 апреля 2020

Я пытаюсь создать серию двоичных шаблонов, соответствующих возрастанию целых чисел без знака, используя четыре светодиода в портах N и F микроконтроллера. схема светодиодов должна отображаться следующим образом:

0x00: (LLLL) 0x01: (LLLH) 0x02: (LLHL)… 0x0F: (HHHH) 0x10: (LLLL) 0x11: (LLLH) ...

Я не могу заставить светодиоды мигать в таком порядке, пока я oop использую счетчик, как я могу заставить эту работу работать? Микроконтроллер - это техасские инструменты TM4C1294XL, и программа имеет код c.

int main(void)
{
     /**
     * GPIO initialization
     */
    SYSCTL_RCGCGPIO_R |= 0x00001020 ; // enable port N & F
    while((SYSCTL_RCGCGPIO_R & 0x00001020) == 0); // wait until the port is available
    GPIO_PORTN_DEN_R = 0x03; // PN(0,1) enable
    GPIO_PORTN_DIR_R = 0x03; // PN(0,1) output
    GPIO_PORTF_AHB_DEN_R = 0x11; // PF(0,4) enable
    GPIO_PORTF_AHB_DIR_R = 0x11; // PF(0,4) output

     /**
     * TIMER initialization: compare mode
     */
    SYSCTL_RCGCTIMER_R |= (1<<1);
    while (!(SYSCTL_PRTIMER_R & (1<<1)) == 0);
    TIMER1_CTL_R &= ~(1<<0); // stop timer
    TIMER1_CFG_R = 0x4; // 16-bit
    TIMER1_TAMR_R |= 0x12; // periodic, upwards counting
    TIMER1_TAPR_R = 245-1; // prescalar value: timeout=1s, f(cpu)=16MHz
    TIMER1_TAILR_R = 65307-1; // interval load value: timeout=1s, f(cpu)=16MHz
    TIMER1_CTL_R |= (1<<0); // start timer

    unsigned int counter = 0;

     while(1)
     {
         counter++;

         while (GPIO_PORTN_DATA_R & counter == 0);
         GPIO_PORTN_DATA_R = counter;

         while (GPIO_PORTF_AHB_DATA_R & counter == 0);
         GPIO_PORTF_AHB_DATA_R = counter;

         while((TIMER1_RIS_R & (1<<0))==0);
         TIMER1_ICR_R |= (1<<0);
         GPIO_PORTN_DATA_R = 0x00;
         GPIO_PORTF_AHB_DATA_R = 0x00;
     }

    return 0;
}
...