📄 coprotest.c
字号:
#include <stdio.h>
#include <stdlib.h>
/* exported functions in copro.s */
extern void DoCP4MCR0(unsigned);
extern unsigned DoCP4MRC0(void);
extern void DoCP4CDP0(void);
extern void DoCP4CDP1(void);
extern void DoCP4CDP2(void);
extern void DoCP4CDP3(void);
extern void DoCP4CDP4(void);
extern unsigned int DoCP4CDP5(void);
/* function to enable IRQ and FIQ */
__inline void enable_IF(void);
/* exception handler install */
unsigned Install_Handler( unsigned routine, unsigned *vector )
{
unsigned vec, oldvec;
vec = ((routine - (unsigned)vector - 0x8) >> 2 );
if( vec & 0xff000000 ) {
printf( "Installation of exception handler failed\n" );
exit(1);
}
vec = 0xea000000 | vec;
oldvec = *vector;
*vector = vec;
return (oldvec);
}
__irq void IRQHandler(void)
{
printf( "IRQ entered\n" );
DoCP4CDP4();
}
__irq void FIQHandler(void)
{
printf( "FIQ entered - clear source\n" );
DoCP4MCR0(0); /* put 0 in CP4 c0 */
DoCP4CDP1(); /* Use CDP 1 with time = 0 to clear irq source */
}
int main()
{
unsigned *irqvec = (unsigned*)0x18;
unsigned *fiqvec = (unsigned*)0x1c;
unsigned value=0;
unsigned int timerValue=0;
printf( "Installing handlers\n" );
Install_Handler((unsigned)IRQHandler, irqvec);
Install_Handler((unsigned)FIQHandler, fiqvec);
enable_IF();
printf("Handlers installed\n");
printf("Use MRC/MCR \n" );
DoCP4MCR0(0xFFFFFFFF); /* put 0xFFFFFFFF in CP4 reg 0 */
value = DoCP4MRC0(); /* get above value from CP4 reg 0 */
printf( "Value = %08x\n", value );
DoCP4MCR0(0xaaaaaaaa); /* put 0xaaaaaaaa in CP4 reg 0 */
value = DoCP4MRC0();
printf("Value = %08x\n", value);
printf( "CDP 1 - cause a FIQ\n" );
DoCP4MCR0(500);
DoCP4CDP1();
printf( "Expecting a fiq. \nCDP1 done\n\n\n");
printf( "CDP 2 - cause an IRQ\n" );
DoCP4MCR0(500);
DoCP4CDP2();
printf( "Expecting an irq. \nCDP2 done\n" );
printf( "\n\nRead timer\n" );
timerValue = DoCP4CDP5();
printf( "Value = %08x\n", timerValue );
timerValue = DoCP4CDP5();
printf( "Value = %08x\n", timerValue );
}
__inline void enable_IF(void)
{
int tmp;
__asm
{
MRS tmp, CPSR
BIC tmp, tmp, #0xC0
MSR CPSR_c, tmp
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -