AG903ライブラリリファレンス
内容インデックスホーム
前へ上へ次へ
ospprm.c

OSP Primitive

OSP Primitive

none

AXELL CORPORATION

2017_02_22 初版 

2017_10_26 Ver2.0 

2019_03_08 [SDK2.2] AG903_OSPPrmEnableEventでの設定時にOVFビットをクリアするように変更 (#2199)

1: 10: 11: 15: 16: 17: #include "AG903_common.h" 18: 19: #include "register/AG903_ospreg.h" 20: #include "osp/ospprm.h" 21: #include "osp/ospmgr.h" 22: #include "osp.h" 23: 24: 25: #define EVENT(R) (AG903_OSP->R) 26: 27: #define EVENTn(N) *((uint32_t *)AG903_OSP + N) 28: 29: #define EVTn(EVT) ((OSPEvt_Type *)(AG903_OSP_BASE + (EVT / 4) * 0x04UL)) 30: 31: 32: typedef struct _OSPEvt_Type { 33: 34: union { 35: uint32_t EVENT; 36: 37: struct { 38: uint32_t VAL0:4; 39: uint32_t OVF0:1; 40: uint32_t EN0 :1; 41: uint32_t :2; 42: 43: uint32_t VAL1:4; 44: uint32_t OVF1:1; 45: uint32_t EN1 :1; 46: uint32_t :2; 47: uint32_t VAL2:4; 48: uint32_t OVF2:1; 49: uint32_t EN2 :1; 50: uint32_t :2; 51: 52: uint32_t VAL3:4; 53: uint32_t OVF3:1; 54: uint32_t EN3 :1; 55: uint32_t :2; 56: }; 57: }; 58: }OSPEvt_Type; 59: 60: 68: void AG903_OSPPrmCTRL(const uint8_t ch, const uint8_t en) 69: { 70: ASSERT(ch < AG903_OSP_CH_NUM); 71: 72: AG903_OSPn(ch)->CTRL = (en << AG903_OSPn_CTRL_EN_POS) & AG903_OSPn_CTRL_EN_MSK; 73: } 74: 75: 83: void AG903_OSPPrmPRIOR(const uint8_t ch, const uint8_t pri) 84: { 85: ASSERT(ch < AG903_OSP_CH_NUM); 86: ASSERT(pri < AG903_OSP_PRI_NUM); 87: 88: AG903_OSPn(ch)->PRIOR = (pri << AG903_OSPn_PRIOR_PRIOR_POS) & AG903_OSPn_PRIOR_PRIOR_MSK; 89: } 90: 91: 100: void AG903_OSPPrmFIFOSTAT(const uint8_t ch, uint8_t *ovf, uint8_t *siz) 101: { 102: uint32_t val; 103: 104: ASSERT(ch < AG903_OSP_CH_NUM); 105: ASSERT(ovf != NULL); 106: ASSERT(siz != NULL); 107: 108: val = AG903_OSPn(ch)->FIFOSTAT; 109: *ovf = (val & AG903_OSPn_FIFOSTAT_OVF_MSK) >> AG903_OSPn_FIFOSTAT_OVF_POS; 110: *siz = (val & AG903_OSPn_FIFOSTAT_SIZE_MSK ) >> AG903_OSPn_FIFOSTAT_SIZE_POS; 111: } 112: 113: 121: void AG903_OSPPrmFIFOCTRL(const uint8_t ch) 122: { 123: ASSERT(ch < AG903_OSP_CH_NUM); 124: 125: AG903_OSPn(ch)->FIFOCTRL = AG903_OSPn_FIFOCTRL_CLR_MSK; 126: } 127: 128: 137: void AG903_OSPPrmFIFODT(const uint8_t ch, const uint32_t *dats, const uint32_t len) 138: { 139: uint32_t ii; 140: 141: ASSERT(ch < AG903_OSP_CH_NUM); 142: ASSERT(dats != NULL); 143: 144: for (ii = 0;ii < len;ii++) { 145: AG903_OSPn(ch)->FIFODT = *dats++; 146: } 147: } 148: 149: 158: void AG903_OSPPrmSTAT(const uint8_t ch, uint8_t *stat, uint8_t *cnt) 159: { 160: uint32_t val; 161: 162: ASSERT(ch < AG903_OSP_CH_NUM); 163: ASSERT(stat != NULL); 164: ASSERT(cnt != NULL); 165: 166: val = AG903_OSPn(ch)->STAT; 167: *cnt = (val & AG903_OSPn_STAT_COUNT_MSK) >> AG903_OSPn_STAT_COUNT_POS; 168: *stat = (val & AG903_OSPn_STAT_STAT_MSK) >> AG903_OSPn_STAT_STAT_POS; 169: } 170: 171: 181: void AG903_OSPPrmEnableEvent(const uint8_t evt, const uint8_t en, const uint8_t cnt) 182: { 183: uint8_t evtno, regno, ecnt, ovf; 184: 185: ASSERT(evt < AG903_OSP_EVENT_NUM); 186: 187: regno = evt / 4; 188: evtno = evt % 4; 189: 190: uint8_t *reg = (uint8_t *)&EVENTn(regno) + evtno; 191: if (en == 0) { 192: ecnt = (*reg & AG903_OSP_EVENT0_VAL0_MSK) >> AG903_OSP_EVENT0_VAL0_POS; 193: ovf = (*reg & AG903_OSP_EVENT0_OVF0_MSK) >> AG903_OSP_EVENT0_OVF0_POS; 194: } else { 195: ecnt = cnt; 196: ovf = 0; 197: } 198: *reg = ((en << AG903_OSP_EVENT0_EN0_POS) & AG903_OSP_EVENT0_EN0_MSK )| 199: ((ovf << AG903_OSP_EVENT0_OVF0_POS) & AG903_OSP_EVENT0_OVF0_MSK )| 200: ((ecnt << AG903_OSP_EVENT0_VAL0_POS) & AG903_OSP_EVENT0_VAL0_MSK ); 201: } 202: 203: 211: void AG903_OSPPrmGetEventStat(const uint8_t evt, uint8_t *ovf, uint8_t *cnt) 212: { 213: uint8_t evtno; 214: 215: ASSERT(evt < AG903_OSP_EVENT_NUM); 216: ASSERT(ovf != NULL); 217: ASSERT(cnt != NULL); 218: 219: evtno = evt % 4; 220: 221: switch (evtno) { 222: case 0: 223: *ovf = EVTn(evt)->OVF0; 224: *cnt = EVTn(evt)->VAL0; 225: break; 226: 227: case 1: 228: *ovf = EVTn(evt)->OVF1; 229: *cnt = EVTn(evt)->VAL1; 230: break; 231: 232: case 2: 233: *ovf = EVTn(evt)->OVF2; 234: *cnt = EVTn(evt)->VAL2; 235: break; 236: 237: case 3: 238: *ovf = EVTn(evt)->OVF3; 239: *cnt = EVTn(evt)->VAL3; 240: break; 241: } 242: } 243: 244: 250: void AG903_OSPPrmFLAGSET(const uint32_t flag) 251: { 252: EVENT(FLAGSET) = (flag << AG903_OSP_FLAGSET_F_POS) & AG903_OSP_FLAGSET_F_MSK; 253: } 254: 255: 261: void AG903_OSPPrmFLAGCLR(const uint32_t flag) 262: { 263: EVENT(FLAGCLR) = (flag << AG903_OSP_FLAGCLR_F_POS) & AG903_OSP_FLAGCLR_F_MSK; 264: } 265: 266: 272: void AG903_OSPPrmFLAGSTAT(uint32_t *val) 273: { 274: ASSERT(val != NULL); 275: 276: *val = (EVENT(FLAGSTAT) & AG903_OSP_FLAGSTAT_F_MSK) >> AG903_OSP_FLAGSTAT_F_POS; 277: }
 
名前 
説明 
 
チャンネル制御 
 
イベント制御 
 
FIFO制御 
 
FIFOデータ 
 
FIFO状態 
 
フラグクリア 
 
フラグセット 
 
フラグ状態 
 
イベント状態取得 
 
チャンネル優先度 
 
内部状態取得 
名前 
説明 
共通レジスタ名アクセスマクロ 
EVENTnレジスタアクセスマクロ 
EVTn 
OSPEvt_Type構造体でのアクセス用マクロ 
 
名前 
説明 
 
OSPEVENTレジスタ構造 
 
OSPEVENTレジスタ構造 
Copyright (c) 2017-2025 Axell Corporation. All rights reserved.