2014-10-17 2 views
0

Я написал просто приложение Microblaze C, чтобы проверить дисплей платы с помощью кнопки для переключения между шестнадцатеричным и двоичным режимами.Программа работает правильно только в режиме отладки

Вот мой код:

#include <xparameters.h> 
#include <xgpio.h> 

int main() 
{ 
    XGpio display, digit, bcd, butt; // four variables are defined named display, digit, bcd, butt 
    int flag = 1; 

    XGpio_Initialize (&display, XPAR_AXI_GPIO_0_DEVICE_ID); 
    XGpio_SetDataDirection (&display,1,0); // set display as output ports 
    XGpio_Initialize (&digit,XPAR_AXI_GPIO_1_DEVICE_ID); 
    XGpio_SetDataDirection (&digit,1,0); // set digit as output ports 
    XGpio_Initialize (&bcd,XPAR_AXI_GPIO_2_DEVICE_ID); 
    XGpio_SetDataDirection (&bcd,1,0); // set bcd as output ports 
    XGpio_Initialize (&butt, XPAR_AXI_GPIO_3_DEVICE_ID); 
    XGpio_SetDataDirection (&butt,1,1); //set button as input port 

    while(1) 
    { 
     if (XGpio_DiscreteRead (&butt, 1) == 1) 
     { 
      if (flag==1) 
      { flag=0; } 
      else 
      { flag=1; } 
     } // toggle flag 

     XGpio_DiscreteWrite (&bcd, 1, flag); // set bcd to flag 
     XGpio_DiscreteWrite (&digit, 1, 7); // set n°8 digit 
     XGpio_DiscreteWrite (&display, 1, 99563243); // write to display 
    } 
} 

Когда я отлаживать на борту все в порядке. После загрузки на FPGA переключатель не работает.

Может кто-нибудь объяснить, почему?

+0

Попробуйте определить флаг как Xuint32, а не int. – EkcenierK

+0

Я пытаюсь с Xuint32, но поведение такое же: отладка на доске нормально, загрузка и запуск на FPGA-переключателе не работает, нажатие кнопки переключения не выполняется – Gian

ответ

1

SOLVED нижеследующий код работает хорошо. Определение флага как u32 и добавление цикла задержки.

#include<xparameters.h> 
#include<xgpio.h> 

int main() 
{ 
XGpio display, digit, bcd, sw; // defined gpio variables 
long int delay;     // defined a delay variable 
u32 flag=1;      // defined a flag variable 

XGpio_Initialize(&display, XPAR_AXI_GPIO_0_DEVICE_ID); 
XGpio_SetDataDirection(&display,1,0);     // set display as output ports 
XGpio_Initialize(&digit,XPAR_AXI_GPIO_1_DEVICE_ID); 
XGpio_SetDataDirection(&digit,1,0);      // set digit as output ports 
XGpio_Initialize(&bcd,XPAR_AXI_GPIO_2_DEVICE_ID); 
XGpio_SetDataDirection(&bcd,1,0);      // set bcd as output ports 
XGpio_Initialize(&sw, XPAR_AXI_GPIO_3_DEVICE_ID); 
XGpio_SetDataDirection(&sw,1,1);      //set sw as input port 

while(1) 
{ 
    flag= XGpio_DiscreteRead(&sw, 1); 
    XGpio_DiscreteWrite(&bcd, 1, flag);   // set bcd to flag 
    XGpio_DiscreteWrite(&digit, 1, 7);   // set n°8 digit 
    XGpio_DiscreteWrite(&display, 1, 5888999); // write to display 
    for(delay=0;delay<3000000;delay++){};  // delay cycle 
} 
}  
Смежные вопросы