You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
1.8 KiB
68 lines
1.8 KiB
5 years ago
|
//=========================================================
|
||
|
// Simulation setup file for esc07_demo project
|
||
|
//=========================================================
|
||
|
|
||
|
__var _timer0_interrupt_ID;
|
||
|
|
||
|
irqBreak()
|
||
|
{
|
||
|
__var __AIC_SMR;
|
||
|
__var __AIC_IECR;
|
||
|
__var __AIC_IVR;
|
||
|
|
||
|
// read AIC_IECR instead, since not fully supported by simulator
|
||
|
__AIC_IECR = __readMemory32(0xFFFFF120, "Memory");
|
||
|
if(__AIC_IECR & 0x1000)
|
||
|
{
|
||
|
__AIC_SMR = __readMemory32(0xFFFFF060, "Memory");
|
||
|
__AIC_IVR = __readMemory32(0xFFFFF0B0, "Memory"); //AIC_IVR = AIC_SVR[x]
|
||
|
__writeMemory32(__AIC_IVR, 0xFFFFF100, "Memory"); //AIC_IVR
|
||
|
__writeMemory32(0x1000, 0xFFFFF10C, "Memory"); //AIC_IPR
|
||
|
__writeMemory32(0x2, 0xFFFFF114, "Memory"); //AIC_CISR
|
||
|
}
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
setupProcessorRegisters()
|
||
|
{
|
||
|
// Write TC0_SR.CPCS with correct status for ISR (Clock enabled; RC Compare Flag = TRUE)
|
||
|
__writeMemory32(0x00010010, 0xfffa0020, "Memory");
|
||
|
|
||
|
// Set TX ready flag in USART0 status register
|
||
|
// USART0_BASE->US_CSR = AT91C_US_TXRDY
|
||
|
__writeMemory32(0x00000002, 0xfffc0014, "Memory");
|
||
|
}
|
||
|
|
||
|
configureTimer0Interrupt()
|
||
|
{
|
||
|
__var _master_clock_frequency;
|
||
|
__var _timer0_period_cycles;
|
||
|
|
||
|
// Calculate timer0 frequency in master clock cycles
|
||
|
_master_clock_frequency = 48054857;
|
||
|
_timer0_period_cycles = _master_clock_frequency / 100;
|
||
|
if((_master_clock_frequency % 100) >= 50)
|
||
|
{
|
||
|
_timer0_period_cycles++;
|
||
|
}
|
||
|
|
||
|
__cancelAllInterrupts();
|
||
|
__enableInterrupts();
|
||
|
|
||
|
_timer0_interrupt_ID = __orderInterrupt("IRQ", _timer0_period_cycles, _timer0_period_cycles, 0, 0, 0, 100);
|
||
|
|
||
|
if(-1 == _timer0_interrupt_ID)
|
||
|
{
|
||
|
__message "ERROR: failed to order timer 0 interrupt";
|
||
|
}
|
||
|
|
||
|
__setCodeBreak("0x18", 0, "irqBreak()", "TRUE", "");
|
||
|
}
|
||
|
|
||
|
execUserReset()
|
||
|
{
|
||
|
setupProcessorRegisters();
|
||
|
configureTimer0Interrupt();
|
||
|
}
|