主题中讨论的其他器件:HALCOGEN
工具与软件:
您好(Jagadish)、
我注意到、无论 ADC 的 FIFO 大小配置如何(在 HALCoGen 中)、生成的代码将始终读取 BUF0的值(GxBUF[x] . BUF0 )。 例如、adcGetData()函数:
uint32 adcGetData(adcBASE_t *adc, uint32 group, adcData_t * data) { uint32 i; uint32 buf; uint32 mode; uint32 index = (adc == adcREG1) ? 0U : 1U; uint32 intcr_reg = adc->GxINTCR[group]; uint32 count = (intcr_reg >= 256U) ? s_adcFiFoSize[index][group] : (s_adcFiFoSize[index][group] - (uint32)(intcr_reg & 0xFFU)); adcData_t *ptr = data; /* USER CODE BEGIN (16) */ /* USER CODE END */ mode = (adc->OPMODECR & ADC_12_BIT_MODE); if(mode == ADC_12_BIT_MODE) { /** - Get conversion data and channel/pin id */ for (i = 0U; i < count; i++) { buf = adc->GxBUF[group].BUF0; /*SAFETYMCUSW 45 D MR:21.1 <APPROVED> "Valid non NULL input parameters are only allowed in this driver" */ ptr->value = (uint16)(buf & 0xFFFU); ptr->id = (uint32)((buf >> 16U) & 0x1FU); /*SAFETYMCUSW 567 S MR:17.1,17.4 <APPROVED> "Pointer increment needed" */ ptr++; } } else { /** - Get conversion data and channel/pin id */ for (i = 0U; i < count; i++) { buf = adc->GxBUF[group].BUF0; /*SAFETYMCUSW 45 D MR:21.1 <APPROVED> "Valid non NULL input parameters are only allowed in this driver" */ ptr->value = (uint16)(buf & 0x3FFU); ptr->id = (uint32)((buf >> 10U) & 0x1FU); /*SAFETYMCUSW 567 S MR:17.1,17.4 <APPROVED> "Pointer increment needed" */ ptr++; } } adc->GxINTFLG[group] = 9U; /** @note The function adcInit has to be called before this function can be used.\n * The user is responsible to initialize the message box. */ /* USER CODE BEGIN (17) */ /* USER CODE END */ return count; }
在 adcBase_t 内部、代码如下所示:
struct { uint32 BUF0; /**< 0x0090,0x00B0,0x00D0: Group 0-2 result buffer 1 register */ uint32 BUF1; /**< 0x0094,0x00B4,0x00D4: Group 0-2 result buffer 1 register */ uint32 BUF2; /**< 0x0098,0x00B8,0x00D8: Group 0-2 result buffer 2 register */ uint32 BUF3; /**< 0x009C,0x00BC,0x00DC: Group 0-2 result buffer 3 register */ uint32 BUF4; /**< 0x00A0,0x00C0,0x00E0: Group 0-2 result buffer 4 register */ uint32 BUF5; /**< 0x00A4,0x00C4,0x00E4: Group 0-2 result buffer 5 register */ uint32 BUF6; /**< 0x00A8,0x00C8,0x00E8: Group 0-2 result buffer 6 register */ uint32 BUF7; /**< 0x00AC,0x00CC,0x00EC: Group 0-2 result buffer 7 register */ } GxBUF[3U];
我仍然不知道 FIFO 是如何在引擎盖下工作的、更具体地说是:
1. BUF1到 BUF7的用途是什么?
2.对其中一个存储器位置(例如 BUF0) 的读取是否会自动旋转硬件 FIFO (移动尾部)?
谢谢。此致、
Varban