1: int32_t AG903_OSWprCreIsrAuto(
AG903_OSWCIsr* pk_cisr)
2: {
3: ID isrid;
4: int32_t retval;
5: T_CISR cisr;
6:
7:
if(NULL == pk_cisr) {
8:
return -
AG903_EINVAL;
9: }
10:
if( (
AG903_OSW_IRQ_NUM_MAX <= pk_cisr->intno) ||
11: (
AG903_OSW_HLNG != pk_cisr->atr) ||
12: (NULL == pk_cisr->func) ) {
13:
return -
AG903_EINVAL;
14: }
15:
16: cisr.isratr = (ATR)(TA_HLNG|TA_FPU);
17: cisr.exinf = (VP_INT)pk_cisr->exinf;
18: cisr.intno = (INTNO)(
AG903_OSW_IRQ_TOPID + pk_cisr->intno);
19: cisr.isr = (FP)pk_cisr->func;
20: cisr.imask = (IMASK)(OswIntPriorityTbl[pk_cisr->intno]<<3);
21: isrid = acre_isr(&cisr);
22: OSW_SetLastErcd(isrid);
23:
if(0 > isrid) {
24: retval = OSW_ChgErcd(isrid);
25: }
26:
else if(0 == isrid) {
27: retval = -
AG903_ESYS;
28: }
29:
else {
30: retval = isrid;
31: }
32:
33:
return retval;
34: }