Razvalyaev
7e0063eee0
Все основные файлы подтянуты без изменений Изменены (только папка main_matlab): - заглушки для ненужных функций (main_matlab.c) - iq библиотека (IQmathLib_matlab.c) - библиотеки DSP281x
219 lines
4.3 KiB
C
219 lines
4.3 KiB
C
#include "x_int13.h"
|
||
|
||
#include <281xEvTimersInit.h>
|
||
#include <project.h>
|
||
|
||
#include "DSP281x_Examples.h" // DSP281x Examples Include File
|
||
#include "DSP281x_SWPrioritizedIsrLevels.h" // DSP281x Examples Include File
|
||
#include "DSP281x_Device.h"
|
||
#include "MemoryFunctions.h"
|
||
#include "Spartan2E_Adr.h"
|
||
#include "TuneUpPlane.h"
|
||
#include "xp_write_xpwm_time.h"
|
||
#include "params.h"
|
||
#include "pwm_test_lines.h"
|
||
#include "sync_tools.h"
|
||
#include "profile_interrupt.h"
|
||
|
||
//Pointers to handler functions
|
||
void (*int13_handler)() = NULL;
|
||
|
||
|
||
//////////////////////////////////////////////////////////////////////
|
||
//////////////////////////////////////////////////////////////////////
|
||
//////////////////////////////////////////////////////////////////////
|
||
//////////////////////////////////////////////////////////////////////
|
||
|
||
//unsigned int enable_profile_led1_pwm = 1;
|
||
//unsigned int enable_profile_led2_pwm = 1;
|
||
|
||
|
||
|
||
int InitXilinxSpartan2E(void (*int_handler)())
|
||
{
|
||
int err;
|
||
|
||
project.controller.status = component_NotReady;
|
||
|
||
err = load_xilinx_new(0x130000, SIZE_XILINX200);
|
||
if (err)
|
||
return err;
|
||
|
||
err = test_xilinx_live();
|
||
|
||
|
||
#ifdef ENABLE_XINTC_INT13
|
||
if (int_handler)
|
||
XIntcInterruptSetup(int_handler);
|
||
else
|
||
err = 1;
|
||
#endif
|
||
|
||
if (err == 0)
|
||
project.controller.status = component_Ready;
|
||
|
||
return err;
|
||
}
|
||
|
||
#pragma CODE_SECTION(XIntc_INT13_Handler,".fast_run2");
|
||
interrupt void XIntc_INT13_Handler(void)
|
||
{
|
||
static int l2;
|
||
|
||
IER &= MINT13; // Set "global" priority
|
||
|
||
if (xpwm_time.disable_sync_out==0)
|
||
{
|
||
if (xpwm_time.do_sync_out)
|
||
{
|
||
i_sync_pin_on();
|
||
|
||
#if(_ENABLE_PWM_LINES_FOR_TESTS_SYNC)
|
||
PWM_LINES_TK_17_ON;
|
||
#endif
|
||
|
||
|
||
}
|
||
else
|
||
{
|
||
i_sync_pin_off();
|
||
|
||
#if(_ENABLE_PWM_LINES_FOR_TESTS_SYNC)
|
||
PWM_LINES_TK_17_OFF;
|
||
#endif
|
||
|
||
}
|
||
}
|
||
|
||
if (xpwm_time.what_next_interrupt==PWM_LOW_LEVEL_INTERRUPT)
|
||
{
|
||
l2 = 1;
|
||
}
|
||
else
|
||
l2 = 0;
|
||
|
||
|
||
|
||
#if (_ENABLE_INTERRUPT_PROFILE_LED1)
|
||
if (profile_interrupt.for_led1.bits.pwm && l2)
|
||
i_led1_on_off_special(1);
|
||
#endif
|
||
|
||
#if (_ENABLE_INTERRUPT_PROFILE_LED2)
|
||
if (profile_interrupt.for_led2.bits.pwm && l2)
|
||
i_led2_on_off_special(1);
|
||
|
||
#endif
|
||
|
||
|
||
|
||
|
||
EINT;
|
||
|
||
// Insert ISR Code here.......
|
||
|
||
|
||
// i_led2_on_off(1);
|
||
// IER &= 0xEFFF;
|
||
|
||
if (project.controller.write.setup.bit.use_int13 == 1)
|
||
{
|
||
|
||
// EnableInterrupts();
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><>-<2D><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
|
||
// stop_eva_timer1();
|
||
|
||
if(int13_handler)
|
||
{
|
||
int13_handler();
|
||
}
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
//// start_eva_timer1();
|
||
// DINT;
|
||
//
|
||
// IFR &= 0xefff; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!
|
||
// IER |= M_INT13;
|
||
}
|
||
else
|
||
{
|
||
// IFR &= 0xefff; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!
|
||
// IER |= M_INT13;
|
||
|
||
}
|
||
|
||
|
||
// EnableInterrupts();
|
||
// c = IFR; // & 0x0100
|
||
// if (c)
|
||
// {
|
||
// count_lost_interrupt++;
|
||
// IFR &= 0xfeff; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!
|
||
// }
|
||
// EnableInterrupts();
|
||
// i_led2_on_off(0);
|
||
|
||
// IFR &= 0xfeff; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!
|
||
// EINT;
|
||
|
||
|
||
#if (_ENABLE_INTERRUPT_PROFILE_LED1)
|
||
if (profile_interrupt.for_led1.bits.pwm)
|
||
i_led1_on_off_special(0);
|
||
#endif
|
||
#if (_ENABLE_INTERRUPT_PROFILE_LED2)
|
||
if (profile_interrupt.for_led2.bits.pwm)
|
||
if (l2)
|
||
i_led2_on_off_special(0);
|
||
#endif
|
||
|
||
|
||
}
|
||
|
||
int XIntcInterruptSetup(void (*int_handler)())
|
||
{
|
||
int result = 0;
|
||
|
||
EALLOW;
|
||
|
||
GpioMuxRegs.GPEMUX.bit.XNMI_XINT13_GPIOE2=1;
|
||
// GpioMuxRegs.GPEDIR.bit.GPIOE2 = 0;
|
||
// GpioDataRegs.GPESET.bit.GPIOE2 = 1;
|
||
|
||
PieVectTable.XINT13=&XIntc_INT13_Handler;
|
||
int13_handler = int_handler;
|
||
// PieCtrlRegs.PIECRTL.bit.
|
||
XIntruptRegs.XNMICR.bit.POLARITY=0;
|
||
XIntruptRegs.XNMICR.bit.SELECT=1;
|
||
XIntruptRegs.XNMICR.bit.ENABLE=0;
|
||
|
||
// Enable interrupt 13
|
||
// IER |= M_INT13;
|
||
|
||
project.controller.read.status.bit.int13_inited = 1;
|
||
|
||
// EDIS;
|
||
// EnableInterrupts();
|
||
|
||
/*
|
||
* Start the interrupt controller in simulation mode.
|
||
*/
|
||
// result = XIntc_Start(Ptr, intc_mode_is_Sim); // sim mode
|
||
// if (!(result == status_Success))
|
||
return result;
|
||
|
||
// return status_Success;
|
||
}
|
||
|
||
void start_int13_interrupt(void)
|
||
{
|
||
// Enable interrupt 13
|
||
IER |= M_INT13;
|
||
}
|
||
|
||
void stop_int13_interrupt(void)
|
||
{
|
||
// Disable interrupt 13
|
||
// IER &= ~(M_INT13);
|
||
IER &= MINT13; // Set "global" priority
|
||
}
|