adc.c
来自「MC56F802BLDC 可以使用的算法 就是电机启动有点慢」· C语言 代码 · 共 251 行
C
251 行
/*****************************************************************************
*
* Motorola Inc.
* (c) Copyright 2001 Motorola, Inc.
* ALL RIGHTS RESERVED.
*
******************************************************************************
*
* File Name: adc.c
*
* Description: ADC driver
*
* Modules Included:
*
*****************************************************************************/
#include "types.h"
#include "arch.h"
#include "periph.h"
#include "appconfig.h"
#include "adc.h"
/* initialization of ADC A or B module */
/* - it is called through ioctl(ADC_x, ADC_INIT, 0) */
void adcInit(arch_sADC *pAdcBase)
{
if (pAdcBase==ADC_A)
{
/* init of ADC A module */
#ifdef ADC_A_CHANNEL_LIST_REG1
periphMemWrite(ADC_A_CHANNEL_LIST_REG1, &pAdcBase->ChannelList1Reg);
#endif
#ifdef ADC_A_CHANNEL_LIST_REG2
periphMemWrite(ADC_A_CHANNEL_LIST_REG2, &pAdcBase->ChannelList2Reg);
#endif
#ifdef ADC_A_SAMPLE_DISABLE_REG
periphMemWrite(ADC_A_SAMPLE_DISABLE_REG, &pAdcBase->DisableReg);
#endif
/* status registers are not initialized */
/* result registers are not initialized */
/* low limit registers */
#ifdef ADC_A_LOW_LIMIT_REG0
periphMemWrite(ADC_A_LOW_LIMIT_REG0, &pAdcBase->LowLimitReg[0]);
#endif
#ifdef ADC_A_LOW_LIMIT_REG1
periphMemWrite(ADC_A_LOW_LIMIT_REG1, &pAdcBase->LowLimitReg[1]);
#endif
#ifdef ADC_A_LOW_LIMIT_REG2
periphMemWrite(ADC_A_LOW_LIMIT_REG2, &pAdcBase->LowLimitReg[2]);
#endif
#ifdef ADC_A_LOW_LIMIT_REG3
periphMemWrite(ADC_A_LOW_LIMIT_REG3, &pAdcBase->LowLimitReg[3]);
#endif
#ifdef ADC_A_LOW_LIMIT_REG4
periphMemWrite(ADC_A_LOW_LIMIT_REG4, &pAdcBase->LowLimitReg[4]);
#endif
#ifdef ADC_A_LOW_LIMIT_REG5
periphMemWrite(ADC_A_LOW_LIMIT_REG5, &pAdcBase->LowLimitReg[5]);
#endif
#ifdef ADC_A_LOW_LIMIT_REG6
periphMemWrite(ADC_A_LOW_LIMIT_REG6, &pAdcBase->LowLimitReg[6]);
#endif
#ifdef ADC_A_LOW_LIMIT_REG7
periphMemWrite(ADC_A_LOW_LIMIT_REG7, &pAdcBase->LowLimitReg[7]);
#endif
/* high limit registers */
#ifdef ADC_A_HIGH_LIMIT_REG0
periphMemWrite(ADC_A_HIGH_LIMIT_REG0, &pAdcBase->HighLimitReg[0]);
#endif
#ifdef ADC_A_HIGH_LIMIT_REG1
periphMemWrite(ADC_A_HIGH_LIMIT_REG1, &pAdcBase->HighLimitReg[1]);
#endif
#ifdef ADC_A_HIGH_LIMIT_REG2
periphMemWrite(ADC_A_HIGH_LIMIT_REG2, &pAdcBase->HighLimitReg[2]);
#endif
#ifdef ADC_A_HIGH_LIMIT_REG3
periphMemWrite(ADC_A_HIGH_LIMIT_REG3, &pAdcBase->HighLimitReg[3]);
#endif
#ifdef ADC_A_HIGH_LIMIT_REG4
periphMemWrite(ADC_A_HIGH_LIMIT_REG4, &pAdcBase->HighLimitReg[4]);
#endif
#ifdef ADC_A_HIGH_LIMIT_REG5
periphMemWrite(ADC_A_HIGH_LIMIT_REG5, &pAdcBase->HighLimitReg[5]);
#endif
#ifdef ADC_A_HIGH_LIMIT_REG6
periphMemWrite(ADC_A_HIGH_LIMIT_REG6, &pAdcBase->HighLimitReg[6]);
#endif
#ifdef ADC_A_HIGH_LIMIT_REG7
periphMemWrite(ADC_A_HIGH_LIMIT_REG7, &pAdcBase->HighLimitReg[7]);
#endif
/* offset registers */
#ifdef ADC_A_OFFSET_REG0
periphMemWrite(ADC_A_OFFSET_REG0, &pAdcBase->OffsetReg[0]);
#endif
#ifdef ADC_A_OFFSET_REG1
periphMemWrite(ADC_A_OFFSET_REG1, &pAdcBase->OffsetReg[1]);
#endif
#ifdef ADC_A_OFFSET_REG2
periphMemWrite(ADC_A_OFFSET_REG2, &pAdcBase->OffsetReg[2]);
#endif
#ifdef ADC_A_OFFSET_REG3
periphMemWrite(ADC_A_OFFSET_REG3, &pAdcBase->OffsetReg[3]);
#endif
#ifdef ADC_A_OFFSET_REG4
periphMemWrite(ADC_A_OFFSET_REG4, &pAdcBase->OffsetReg[4]);
#endif
#ifdef ADC_A_OFFSET_REG5
periphMemWrite(ADC_A_OFFSET_REG5, &pAdcBase->OffsetReg[5]);
#endif
#ifdef ADC_A_OFFSET_REG6
periphMemWrite(ADC_A_OFFSET_REG6, &pAdcBase->OffsetReg[6]);
#endif
#ifdef ADC_A_OFFSET_REG7
periphMemWrite(ADC_A_OFFSET_REG7, &pAdcBase->OffsetReg[7]);
#endif
/* control registers, initialized last after all initialization */
#ifdef ADC_A_ZERO_CROSS_CONTROL_REG
periphMemWrite(ADC_A_ZERO_CROSS_CONTROL_REG, &pAdcBase->ZeroCrossControlReg);
#endif
#ifdef ADC_A_CONTROL_REG2
periphMemWrite(ADC_A_CONTROL_REG2, &pAdcBase->Control2Reg);
#endif
#ifdef ADC_A_CONTROL_REG1
periphMemWrite(ADC_A_CONTROL_REG1, &pAdcBase->Control1Reg);
#endif
}
else
{
/* init of ADC B module */
#ifdef ADC_B_CHANNEL_LIST_REG1
periphMemWrite(ADC_B_CHANNEL_LIST_REG1, &pAdcBase->ChannelList1Reg);
#endif
#ifdef ADC_B_CHANNEL_LIST_REG2
periphMemWrite(ADC_B_CHANNEL_LIST_REG2, &pAdcBase->ChannelList2Reg);
#endif
#ifdef ADC_B_SAMPLE_DISABLE_REG
periphMemWrite(ADC_B_SAMPLE_DISABLE_REG, &pAdcBase->DisableReg);
#endif
/* status registers are not initialized */
/* result registers are not initialized */
/* low limit registers */
#ifdef ADC_B_LOW_LIMIT_REG0
periphMemWrite(ADC_B_LOW_LIMIT_REG0, &pAdcBase->LowLimitReg[0]);
#endif
#ifdef ADC_B_LOW_LIMIT_REG1
periphMemWrite(ADC_B_LOW_LIMIT_REG1, &pAdcBase->LowLimitReg[1]);
#endif
#ifdef ADC_B_LOW_LIMIT_REG2
periphMemWrite(ADC_B_LOW_LIMIT_REG2, &pAdcBase->LowLimitReg[2]);
#endif
#ifdef ADC_B_LOW_LIMIT_REG3
periphMemWrite(ADC_B_LOW_LIMIT_REG3, &pAdcBase->LowLimitReg[3]);
#endif
#ifdef ADC_B_LOW_LIMIT_REG4
periphMemWrite(ADC_B_LOW_LIMIT_REG4, &pAdcBase->LowLimitReg[4]);
#endif
#ifdef ADC_B_LOW_LIMIT_REG5
periphMemWrite(ADC_B_LOW_LIMIT_REG5, &pAdcBase->LowLimitReg[5]);
#endif
#ifdef ADC_B_LOW_LIMIT_REG6
periphMemWrite(ADC_B_LOW_LIMIT_REG6, &pAdcBase->LowLimitReg[6]);
#endif
#ifdef ADC_B_LOW_LIMIT_REG7
periphMemWrite(ADC_B_LOW_LIMIT_REG7, &pAdcBase->LowLimitReg[7]);
#endif
/* high limit registers */
#ifdef ADC_B_HIGH_LIMIT_REG0
periphMemWrite(ADC_B_HIGH_LIMIT_REG0, &pAdcBase->HighLimitReg[0]);
#endif
#ifdef ADC_B_HIGH_LIMIT_REG1
periphMemWrite(ADC_B_HIGH_LIMIT_REG1, &pAdcBase->HighLimitReg[1]);
#endif
#ifdef ADC_B_HIGH_LIMIT_REG2
periphMemWrite(ADC_B_HIGH_LIMIT_REG2, &pAdcBase->HighLimitReg[2]);
#endif
#ifdef ADC_B_HIGH_LIMIT_REG3
periphMemWrite(ADC_B_HIGH_LIMIT_REG3, &pAdcBase->HighLimitReg[3]);
#endif
#ifdef ADC_B_HIGH_LIMIT_REG4
periphMemWrite(ADC_B_HIGH_LIMIT_REG4, &pAdcBase->HighLimitReg[4]);
#endif
#ifdef ADC_B_HIGH_LIMIT_REG5
periphMemWrite(ADC_B_HIGH_LIMIT_REG5, &pAdcBase->HighLimitReg[5]);
#endif
#ifdef ADC_B_HIGH_LIMIT_REG6
periphMemWrite(ADC_B_HIGH_LIMIT_REG6, &pAdcBase->HighLimitReg[6]);
#endif
#ifdef ADC_B_HIGH_LIMIT_REG7
periphMemWrite(ADC_B_HIGH_LIMIT_REG7, &pAdcBase->HighLimitReg[7]);
#endif
/* offset registers */
#ifdef ADC_B_OFFSET_REG0
periphMemWrite(ADC_B_OFFSET_REG0, &pAdcBase->OffsetReg[0]);
#endif
#ifdef ADC_B_OFFSET_REG1
periphMemWrite(ADC_B_OFFSET_REG1, &pAdcBase->OffsetReg[1]);
#endif
#ifdef ADC_B_OFFSET_REG2
periphMemWrite(ADC_B_OFFSET_REG2, &pAdcBase->OffsetReg[2]);
#endif
#ifdef ADC_B_OFFSET_REG3
periphMemWrite(ADC_B_OFFSET_REG3, &pAdcBase->OffsetReg[3]);
#endif
#ifdef ADC_B_OFFSET_REG4
periphMemWrite(ADC_B_OFFSET_REG4, &pAdcBase->OffsetReg[4]);
#endif
#ifdef ADC_B_OFFSET_REG5
periphMemWrite(ADC_B_OFFSET_REG5, &pAdcBase->OffsetReg[5]);
#endif
#ifdef ADC_B_OFFSET_REG6
periphMemWrite(ADC_B_OFFSET_REG6, &pAdcBase->OffsetReg[6]);
#endif
#ifdef ADC_B_OFFSET_REG7
periphMemWrite(ADC_B_OFFSET_REG7, &pAdcBase->OffsetReg[7]);
#endif
/* control registers, initialized last after all initialization */
#ifdef ADC_B_ZERO_CROSS_CONTROL_REG
periphMemWrite(ADC_B_ZERO_CROSS_CONTROL_REG, &pAdcBase->ZeroCrossControlReg);
#endif
#ifdef ADC_B_CONTROL_REG2
periphMemWrite(ADC_B_CONTROL_REG2, &pAdcBase->Control2Reg);
#endif
#ifdef ADC_B_CONTROL_REG1
periphMemWrite(ADC_B_CONTROL_REG1, &pAdcBase->Control1Reg);
#endif
}
}
/* reads all 8 results from result registers to array (adc_tBuff) */
void AdcRdResults(adc_tBuff buff, UWord16 *reg)
{
UWord16 i;
// pridat cykl cteni
for (i=0; i<8; i++)
{
buff[i] = periphMemRead(reg++);
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?