Код
#include <stdio.h>
#include "platform.h"
#include "XIOModule.h"
#define IOBUS_write_fifo (*(volatile u32 *) 0xC0000000)
XIOModule DelayTimer;
void delay_us(u32 time);
void myISR( void )
{
IOBUS_write_fifo = 0xA;
delay_us(1);
IOBUS_write_fifo = 0xB;
}
int main()
{
init_platform();
u32 uGpi0;
//external interrupt
u8 uIntrId = 16;//XPAR_IOMODULE_0_SYSTEM_INTC_INTERRUPT_0_INTR;
XIOModule NfdsIOMdule;
XIOModule_Initialize(&NfdsIOMdule, XPAR_IOMODULE_0_DEVICE_ID);
XIOModule_Start(&NfdsIOMdule);
// Initialize the Timer
u32 status;
status = XIOModule_Timer_Initialize(&DelayTimer, XPAR_IOMODULE_0_DEVICE_ID);
if (status != XST_SUCCESS){
xil_printf("Timer failed to initialize\r\n");
return XST_FAILURE;
}
XIOModule_Timer_SetOptions(&DelayTimer, 0, XTC_INT_MODE_OPTION);
microblaze_register_handler(XIOModule_DeviceInterruptHandler, XPAR_IOMODULE_0_DEVICE_ID);
XIOModule_Connect(&NfdsIOMdule, uIntrId, myISR, XPAR_IOMODULE_0_DEVICE_ID);
XIOModule_Enable(&NfdsIOMdule, uIntrId);
microblaze_enable_interrupts();
while(1)
{
uGpi0 = XIOModule_DiscreteRead(&NfdsIOMdule, 1); //read gpio (Slide Switches)
XIOModule_DiscreteWrite(&NfdsIOMdule, 1, uGpi0); //write gpio (Discrete LEDs)
}
cleanup_platform();
return 0;
}
void delay_us(u32 time)
{
XIOModule_SetResetValue(&DelayTimer, 0, time);
XIOModule_Timer_Start(&DelayTimer, 0);
while(!(XIOModule_IsExpired(&DelayTimer, 0))){}
XIOModule_Timer_Stop(&DelayTimer, 0);
}
#include "platform.h"
#include "XIOModule.h"
#define IOBUS_write_fifo (*(volatile u32 *) 0xC0000000)
XIOModule DelayTimer;
void delay_us(u32 time);
void myISR( void )
{
IOBUS_write_fifo = 0xA;
delay_us(1);
IOBUS_write_fifo = 0xB;
}
int main()
{
init_platform();
u32 uGpi0;
//external interrupt
u8 uIntrId = 16;//XPAR_IOMODULE_0_SYSTEM_INTC_INTERRUPT_0_INTR;
XIOModule NfdsIOMdule;
XIOModule_Initialize(&NfdsIOMdule, XPAR_IOMODULE_0_DEVICE_ID);
XIOModule_Start(&NfdsIOMdule);
// Initialize the Timer
u32 status;
status = XIOModule_Timer_Initialize(&DelayTimer, XPAR_IOMODULE_0_DEVICE_ID);
if (status != XST_SUCCESS){
xil_printf("Timer failed to initialize\r\n");
return XST_FAILURE;
}
XIOModule_Timer_SetOptions(&DelayTimer, 0, XTC_INT_MODE_OPTION);
microblaze_register_handler(XIOModule_DeviceInterruptHandler, XPAR_IOMODULE_0_DEVICE_ID);
XIOModule_Connect(&NfdsIOMdule, uIntrId, myISR, XPAR_IOMODULE_0_DEVICE_ID);
XIOModule_Enable(&NfdsIOMdule, uIntrId);
microblaze_enable_interrupts();
while(1)
{
uGpi0 = XIOModule_DiscreteRead(&NfdsIOMdule, 1); //read gpio (Slide Switches)
XIOModule_DiscreteWrite(&NfdsIOMdule, 1, uGpi0); //write gpio (Discrete LEDs)
}
cleanup_platform();
return 0;
}
void delay_us(u32 time)
{
XIOModule_SetResetValue(&DelayTimer, 0, time);
XIOModule_Timer_Start(&DelayTimer, 0);
while(!(XIOModule_IsExpired(&DelayTimer, 0))){}
XIOModule_Timer_Stop(&DelayTimer, 0);
}
В моем понимании обращение delay_us(1) должно давать задержку в 1 такт или я не прав?