小弟做一个简单的AD采样,主要在协处理器里完成,在主程序里面读取采样结果。如下,主程序中的配置:
#define ROUTE_INTERRUPT(vec_adr, cfdata) \
INT_CFADDR= (vec_adr) & 0xF0; \
INT_CFDATA_ARR[((vec_adr) & 0x0F) >> 1]= (cfdata)
#define ATD0_VEC 0xd2
//#define SOFTWARETRIGGER0_VEC 0x72 /* vector address= 2 * channel id */
static void SetupXGATE(void) {
/* initialize the XGATE vector block and
set the XGVBR register to its start address */
XGVBR= (unsigned int)(void*__far)(XGATE_VectorTable - XGATE_VECTOR_OFFSET);
/* switch software trigger 0 interrupt to XGATE */
ROUTE_INTERRUPT(ATD0_VEC, 0x81); /* RQST=1 and PRIO=1 */
二、协处理器的设置
interrupt void ATD0_Thread(MyDataType* __restrict pData)
{
AD_in0 = ATD0DR0;
AD_in1 = ATD0DR1;
DCPU = 0;
ATD0CTL2_ASCIE = 0;
asm SIF;
}
const XGATE_TableEntry XGATE_VectorTable[] = {..........
{(XGATE_Function)ATD0_Thread, 0x69}, //channel 69 - ATD0
........}
三、返回主函数main中,响应协处理器函数
/************************************************************/
/* 主处理器响应协处理器的中断函数 */
/************************************************************/
#pragma CODE_SEG __NEAR_SEG NON_BANKED
interrupt 22 void ATD0_handler(void)
{
x = AD_in0;
y = AD_in1;
ATD0CTL2_ASCIE = 1;
}
#pragma CODE_SEG DEFAULT
以上是我的程序,仿真结果是每次只能采集一次数据,且进入不了主函数中响应协处理器的那个函数。 |