This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
大家好、当我尝试读取电路板上的传感器时、以下代码能够很好地读取操纵杆值和麦克风。 但它不适用于读取加速计。 即使加速计开启 x = PE0、y = PE1、z = PE2。 PE0映射到 CH3、PE1 = CH2、PE2 = CH1。
请参阅下面的代码、提前感谢。
#define JOYSTICKX 1 #define JOYSTICKY 2 #define MICROPHONE 3 #define ACCELX 4 #define ACCELY 5 #define ACCELZ 6 SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE); while(!SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOE)) {} SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0); while(!SysCtlPeripheralReady(SYSCTL_PERIPH_ADC0)) {} GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_4); //Joystick Y GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_3); //Joystick X GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_0); //Accelerometer X ADCSequenceConfigure(ADC0_BASE, JOYSTICKX, ADC_TRIGGER_PROCESSOR, 0); ADCSequenceStepConfigure(ADC0_BASE, JOYSTICKX, 0, ADC_CTL_IE | ADC_CTL_END | ADC_CTL_CH9); //Joystick X ADCSequenceEnable(ADC0_BASE, JOYSTICKX); ADCSequenceConfigure(ADC0_BASE, JOYSTICKY, ADC_TRIGGER_PROCESSOR, 0); ADCSequenceStepConfigure(ADC0_BASE, JOYSTICKY, 0, ADC_CTL_IE | ADC_CTL_END | ADC_CTL_CH0); //Joystick Y ADCSequenceEnable(ADC0_BASE, JOYSTICKY); ADCSequenceConfigure(ADC0_BASE, ACCELX, ADC_TRIGGER_PROCESSOR, 0); ADCSequenceStepConfigure(ADC0_BASE, ACCELX, 0, ADC_CTL_IE | ADC_CTL_END | ADC_CTL_CH3); //AccelX ADCSequenceEnable(ADC0_BASE, ACCELX); ADCProcessorTrigger(ADC0_BASE, JOYSTICKX); while(!ADCIntStatus(ADC0_BASE, JOYSTICKX, false)){} ADCSequenceDataGet(ADC0_BASE, JOYSTICKX, &x); ADCProcessorTrigger(ADC0_BASE, JOYSTICKY); while(!ADCIntStatus(ADC0_BASE, JOYSTICKY, false)){} ADCSequenceDataGet(ADC0_BASE, JOYSTICKY, &y); ADCProcessorTrigger(ADC0_BASE, ACCELZ); while(!ADCIntStatus(ADC0_BASE, ACCELZ, false)){} ADCSequenceDataGet(ADC0_BASE, ACCELZ, &accZ);
我不知道如何编辑我的帖子、但我在第39-41行的 ACCELX 上触发处理器、我粘贴了错误的代码。
您好!
您有以下行。
GPIOPinTypeADC (GPIO_Porte _BASE、GPIO_PIN_0);//加速计 X
如果您要在 PE2、PE1和 PE0上采样、则需要更改为:
GPIOPinTypeADC (GPIO_Porte _BASE、 GPIO_PIN_2 | GPIO_PIN_1 | GPIO_PIN_0);
我在代码中看到的另一件事如下:
ADCSequenceConfigure (ADC0_BASE、JOYSTICKX、ADC_TRIGGER_PROCESSOR、0);
ADCSequenceStepConfigure (ADC0_BASE、JOYSTICKX、0、ADC_CTL_IE | ADC_CTL_END | ADC_CTL_CH9);//Joystick X
ADCSequenceEnable (ADC0_BASE、JOYSTICKX);
ADCSequenceConfigure (ADC0_BASE、JOYSTICKY、ADC_TRIGGER_PROCESSOR、0);
ADCSequenceStepConfigure (ADC0_BASE、JOYSTICKY、0、ADC_CTL_IE | ADC_CTL_END | ADC_CTL_CH0);//Joystick Y
ADCSequenceEnable (ADC0_BASE、JOYSTICKY);
ADCSequenceConfigure (ADC0_BASE、ACCELX、ADC_TRIGGER_PROCESSORE、0);
ADCSequenceStepConfigure (ADC0_BASE、ACCELX、0、ADC_CTL_IE | ADC_CTL_END | ADC_CTL_CH3);//AccelX
ADCSequenceEnable (ADC0_BASE、ACCELX);
首先、您将 CH9设为在序列发生器0中采样的唯一通道、并将其设为序列发生器中的最后一个通道。 稍后、您将创建 CH0、它将覆盖先前的设置。 随后、您再次将 CH3设为序列发生器0的最后一个通道、并使用 CH3转换完成来触发中断。 它们只是覆盖先前的设置。
如果要使用序列发生器0对3个通道进行采样、则需要执行以下操作。 下面只是一个示例。
GPIOPinTypeADC (GPIO_Porte _BASE、GPIO_PIN_3 | GPIO_PIN_2 | GPIO_PIN_1);
ADCSequenceConfigure (ADC0_BASE、0、ADC_TRIGGER_PROCESSOR、0);
ADCSequenceStepConfigure (ADC0_BASE、0、0、ADC_CTL_CH0); // CH0是序列发生器0的第0步
ADCSequenceStepConfigure (ADC0_BASE、0、1、ADC_CTL_CH1);// CH1是序列发生器0的第1步
ADCSequenceStepConfigure (ADC0_BASE、0、2、ADC_CTL_CH2 | ADC_CTL_IE | ADC_CTL_END);//CH2是序列发生器0的第2步。 CH2是序列发生器0中的最后一个通道 //并使用 CH2转换完成来触发中断。
ADCSequenceEnable (ADC0_BASE、0);
非常感谢。 我现在只能让它部分工作。 但仍在进步。
此代码起作用。 但是、当我尝试将 ADCSequenceStepConfigure 结束更改为麦克风(CH8)时、它将停止工作。
ADCSequenceConfigure(ADC0_BASE, 0, ADC_TRIGGER_PROCESSOR, 0); ADCSequenceStepConfigure(ADC0_BASE, 0, 0, ADC_CTL_CH0); //Joystick Y ADCSequenceStepConfigure(ADC0_BASE, 0, 1, ADC_CTL_CH1); //AccelZ ADCSequenceStepConfigure(ADC0_BASE, 0, 2, ADC_CTL_CH2); //AccelY ADCSequenceStepConfigure(ADC0_BASE, 0, 3, ADC_CTL_IE | ADC_CTL_END | ADC_CTL_CH3); //AccelX //ADCSequenceStepConfigure(ADC0_BASE, 0, 4, ADC_CTL_IE | ADC_CTL_END | ADC_CTL_CH8); //Microphone ADCSequenceEnable(ADC0_BASE, 0); ADCProcessorTrigger(ADC0_BASE, 0); while(!ADCIntStatus(ADC0_BASE, 0, false)){} ADCSequenceDataGet(ADC0_BASE, 0, &y); ADCSequenceDataGet(ADC0_BASE, 1, &accZ); ADCSequenceDataGet(ADC0_BASE, 2, &accY); ADCSequenceDataGet(ADC0_BASE, 3, &accX); //ADCSequenceDataGet(ADC0_BASE, 4, &mic);
您好!
您希望将 CH8用于麦克风、作为序列发生器中的最后一个通道。 请注意、CH8位于 PE5引脚上。 是否确定添加了 PE5?
GPIOPinTypeADC (GPIO_Porte _BASE、GPIO_PIN_5 | GPIO_PIN_3 | GPIO_PIN_2 | GPIO_PIN_1 | GPIO_PIN_0);
您好!
是的、我已添加 GPIO_PIN_5。 下面是我的设置、这些都是我要使用的外设。
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE); while(!SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOE)) {} SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0); while(!SysCtlPeripheralReady(SYSCTL_PERIPH_ADC0)) {} GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_4); //Joystick Y GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_3); //Joystick X GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_0); //AccelX GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_1); //AccelY GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_2); //AccelZ GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_5); //Microphone ADCSequenceConfigure(ADC0_BASE, 0, ADC_TRIGGER_PROCESSOR, 0); ADCSequenceStepConfigure(ADC0_BASE, 0, 0, ADC_CTL_CH0); //Joystick Y ADCSequenceStepConfigure(ADC0_BASE, 0, 1, ADC_CTL_CH1); //AccelZ ADCSequenceStepConfigure(ADC0_BASE, 0, 2, ADC_CTL_CH2); //AccelY ADCSequenceStepConfigure(ADC0_BASE, 0, 3, ADC_CTL_CH3); //AccelX ADCSequenceStepConfigure(ADC0_BASE, 0, 4, ADC_CTL_CH8); //Microphone ADCSequenceStepConfigure(ADC0_BASE, 0, 5, ADC_CTL_IE | ADC_CTL_END | ADC_CTL_CH9); //Joystick X ADCSequenceEnable(ADC0_BASE, 0);
ADCProcessorTrigger(ADC0_BASE, 0); while(!ADCIntStatus(ADC0_BASE, 0, false)){} ADCSequenceDataGet(ADC0_BASE, 0, &y); ADCSequenceDataGet(ADC0_BASE, 1, &accZ); ADCSequenceDataGet(ADC0_BASE, 2, &accY); ADCSequenceDataGet(ADC0_BASE, 3, &accX); ADCSequenceDataGet(ADC0_BASE, 4, &mic); ADCSequenceDataGet(ADC0_BASE, 5, &x);
ADCProcessorTrigger(ADC0_BASE, 0); while(!ADCIntStatus(ADC0_BASE, 0, false)){} ADCSequenceDataGet(ADC0_BASE, 0, &y); ADCSequenceDataGet(ADC0_BASE, 1, &accZ); ADCSequenceDataGet(ADC0_BASE, 2, &accY); ADCSequenceDataGet(ADC0_BASE, 3, &accX); ADCSequenceDataGet(ADC0_BASE, 4, &mic); ADCSequenceDataGet(ADC0_BASE, 5, &x);
ADC 模块仅支持4个序列发生器。
请参阅下面 ADCSequenceDataGet 的用法。 第二个参数是序列发生器编号。 您的所有通道都位于同一序列发生器0中。 没有序列发生器4或5。
谢谢您、我明天将查看并尝试使其正常工作。 您非常乐于助人、我非常感激。