主题中讨论的其他器件: TM4C123
您好!
我 将 TM4C1294NCPDT 与 IAR 搭配使用。
我将 LM3S9B96端口到 TM4C1294NCPDT,特别是 ADC。 看起来我的一切都正常、但我在微控制器之间进行了不同的转换。
我施加的唯一差异是 ADC 输入端(TM4C1294NCPDT)上的电阻、文档中显示 为 http://www.ti.com/lit/an/spma049a/spma049a.pdf
关于
下面我放置了源代码和读取表、我知道 LM3S9B96在10位下工作、 TM4C1294NCPDT 在12位下工作、因此我进行了转换、只需将 TM4C1294NCPDT 结果除以4即可。
请看一下、评论将会很好。
此致。
|
ADC |
ADC |
|
|
电压 |
TM4C1294NCPDT |
LM3S9B96 |
|
3、3 |
1010. |
69 |
|
3、2 |
959. |
672. |
|
3、1 |
948 |
662. |
|
3. |
902 |
648. |
|
2.9. |
8664 |
629 |
|
2.8. |
847. |
623 |
|
2.7. |
822 |
612. |
|
2、6 |
794 |
599 |
|
2.5. |
750 |
586 |
|
2、4 |
716) |
573) |
|
2、3 |
686. |
553. |
|
2、2 |
661. |
545 |
|
2、1 |
615 |
533. |
|
2. |
598 |
517 |
|
1.9. |
569. |
501 |
|
1、8 |
531 |
486. |
|
1、7 |
509. |
478 |
|
1、6 |
466 |
460 |
|
1.5 |
435 |
451. |
|
1、4 |
408. |
432 |
|
1、3 |
361. |
426 |
|
1、2 |
345 |
413 |
|
1、1 |
300 |
400 |
|
1 |
275. |
378. |
|
0.9. |
231. |
370 |
|
0、8. |
214. |
357. |
|
0、7 |
184. |
348 |
|
0、6 |
146. |
337. |
//LM3S9B96
///------------------------------------------------
void main (void)
{
SysCtlClockSet (SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |
SYSCTL_XTAL_8MHZ);
SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0);
TimerConfigure (TIMER0_BASE、TIMER_CFG_32_bit_PER);
TimerLoadSet (TIMER0_BASE、TIMER_A、SysCtlClockGet ()/4000); // 250µSec
TimerEnable (TIMER0_BASE、TIMER_A);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);
GPIOPinTypeADC (GPIO_PORTD_base、AIN9 | AIN10 | AIN11 | AIN12 | AIN1 | AIN2 | AIN3 | AIN4);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOE);
GPIOPinTypeADC (GPIO_Porte _BASE、AIN8 | AIN7 | AIN6 | AIN5);
//将 ADC 配置为
//
SysCtlPeripheralEnable (SYSCTL_Periph_ADC0);
SysCtlPeripheralEnable (SYSCTL_Periph_ADC1); // ADC1
ADCSequenceDisable (ADC1_base、2);
ADCSequenceDisable (ADC0_BASE、0);
SysCtlADCSpeedSet (SYSCTL_ADCSPEED_500KSPS);
ADCSequenceConfigure (ADC0_BASE、0、ADC_TRIGGER_processor、1);//序列发生器0优先级0
ADCSequenceStepConfigure (ADC0_BASE、0、0、ADC_CTL_CH0);
ADCSequenceStepConfigure (ADC0_BASE、0、1、ADC_CTL_CH1);
ADCSequenceStepConfigure (ADC0_BASE、0、2、ADC_CTL_CH2);
ADCSequenceStepConfigure (ADC0_BASE、0、3、ADC_CTL_CH3);
ADCSequenceStepConfigure (ADC0_BASE、0、4、ADC_CTL_CH4);
ADCSequenceStepConfigure (ADC0_BASE、0、5、ADC_CTL_CH5);
ADCSequenceStepConfigure (ADC0_BASE、0、6、ADC_CTL_CH6);
ADCSequenceStepConfigure (ADC0_BASE、0、7、ADC_CTL_CH7| ADC_CTL_IE | ADC_CTL_END);
//设置第二个 ADC
ADCSequenceConfigure (ADC1_base、2、ADC_TRIGGER_PROCESSOR, 0);//序列发生器1优先级1
ADCSequenceStepConfigure (ADC1_base、2、0、ADC_CTL_CH12);
ADCSequenceStepConfigure (ADC1_BASE、2、1、ADC_CTL_CH13);
ADCSequenceStepConfigure (ADC1_base、2、2、ADC_CTL_CH14);
ADCSequenceStepConfigure (ADC1_base、2、3、ADC_CTL_CH15 | ADC_CTL_IE | ADC_CTL_END);
ADCSequenceEnable (ADC0_BASE、0);//使能序列0
ADCIntEnable (ADC0_BASE、0); //启用中断序列0
IntEnable (INT_ADC0); //
ADCSequenceEnable (ADC1_base、2);//使能序列1
ADCIntEnable (ADC1_BASE、2); //启用中断序列1.
IntEnable (INT_ADC1SS2);
while (1);
}
空 ADC0IntHandler (空)
{
ADCIntClear (ADC0_BASE、0);
unsigned long ulData[8]; //
//从 ADC 读取数据。
//
ADCSequenceDataGet (ADC0_BASE、0、ulData);
ADCC++;
}
空 ADC1IntHandler (空)
{
ADCIntClear (ADC1_BASE、2);
unsigned long ulData[8]; //
//从 ADC 读取数据。
//
ADCSequenceDataGet (ADC1_base、2、ulData);
ADCC1++;
}
空 Timer0IntHandler (空)
{
//
//清除计时器中断。
//
TimerIntClear (TIMER0_BASE、TIMER_TINA_TIMEOUT);
ADCProcessorTrigger (ADC1_base、2);
ADCProcessorTrigger (ADC0_BASE、0);
}
//TM4C1294NCPDT
///--------------------------------------------
void main (void)
{
G_ui32SysClock = MAP_SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |
SYSCTL_OSC_MAIN | SYSCTL_USE_PLL |
SYSCTL_CFG_VCO_480)、120000000);
SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0);
TimerConfigure (TIMER0_BASE、TIMER_CFG_32_bit_PER);
TimerLoadSet (TIMER0_BASE、TIMER_A、SysCtlClockGet ()/4000); // 250µSec
TimerEnable (TIMER0_BASE、TIMER_A);
//
//配置用于模拟反馈输入的 GPIO 引脚 PORT_B。
ROM_GPIOPinTypeADC (GPIO_PORTB_BASE、AIN10 | AIN11);
//配置用于模拟反馈输入的 GPIO 引脚 PORT_D。
ROM_GPIOPinTypeADC (GPIO_PORTD_base、AIN12 | AIN7 | AIN6 | AIN5 | AIN4);
//配置用于模拟反馈输入的 GPIO 引脚 PORT_E。
ROM_GPIOPinTypeADC (GPIO_Porte _BASE、AIN3 | AIN2 | AIN1 | AIN9 | AIN8);
////////////////////////////
/将 ADC 配置为
//
SysCtlPeripheralEnable (SYSCTL_Periph_ADC0);
SysCtlPeripheralEnable (SYSCTL_Periph_ADC1); // ADC1
ADCSequenceDisable (ADC1_base、2);
ADCSequenceDisable (ADC0_BASE、0);
ADCClockConfigSet (ADC0_BASE、ADC_CClock_SRC_PLL | ADC_CClock_RATE_FULL、240);//120000000/500000 = 240
ADCClockConfigSet (ADC1_base、ADC_CLOCK、SRC_PLL | ADC_CLOCK、RATE_FULL、240);
//SysCtlADCSpeedSet (SYSCTL_ADCSPEED_500KSPS);//LM3S9B96
ADCSequenceConfigure (ADC0_BASE、0、ADC_TRIGGER_processor、1);//序列发生器0优先级0
ADCSequenceStepConfigure (ADC0_BASE、0、0、ADC_CTL_CH1);
ADCSequenceStepConfigure (ADC0_BASE、0、1、ADC_CTL_CH2);
ADCSequenceStepConfigure (ADC0_BASE、0、2、ADC_CTL_CH3);
ADCSequenceStepConfigure (ADC0_BASE、0、3、ADC_CTL_CH4);
ADCSequenceStepConfigure (ADC0_BASE、0、4、ADC_CTL_CH5);
ADCSequenceStepConfigure (ADC0_BASE、0、5、ADC_CTL_CH6);
ADCSequenceStepConfigure (ADC0_BASE、0、6、ADC_CTL_CH7);
ADCSequenceStepConfigure (ADC0_BASE、0、7、ADC_CTL_CH8| ADC_CTL_IE | ADC_CTL_END);
//设置第二个 ADC
ADCSequenceConfigure (ADC1_base、2、ADC_TRIGGER_PROCESSOR, 0);//序列发生器1优先级1
ADCSequenceStepConfigure (ADC1_base、2、0、ADC_CTL_CH9);
ADCSequenceStepConfigure (ADC1_base、2、1、ADC_CTL_CH10);
ADCSequenceStepConfigure (ADC1_base、2、2、ADC_CTL_CH11);
ADCSequenceStepConfigure (ADC1_base、2、3、ADC_CTL_CH12 | ADC_CTL_IE | ADC_CTL_END);
IntMasterEnable();
ADCSequenceEnable (ADC0_BASE、0);//使能序列0
ADCIntEnable (ADC0_BASE、0); //启用中断序列0
///ROM_IntEnable (INT_ADC0SS0);
IntEnable (INT_ADC0SS0);
//IntEnable (INT_ADC0); //
IntMasterEnable();
ADCSequenceEnable (ADC1_base、2);//使能序列1
ADCIntEnable (ADC1_BASE、2); //启用中断序列1.
IntEnable (INT_ADC1SS2);
while (1);
}
空 ADC0IntHandler (空)
{
ADCIntClear (ADC0_BASE、0);
uint32_t ulData[8]; //
//从 ADC 读取数据。
//
ADCSequenceDataGet (ADC0_BASE、0、ulData);
for (int i=8;i < 8;i++)//将12位转换为10位
ulData[i]= ulData[i]/4;
ADCC++;
}
空 ADC1IntHandler (空)
{
ADCIntClear (ADC1_BASE、2);
uint32_t ulData[8]; //
//从 ADC 读取数据。
//
ADCSequenceDataGet (ADC1_base、2、ulData);
for (int i=8;i < 8;i++)//将12位转换为10位
ulData[i]= ulData[i]/4;
ADCC1++;
}
空 Timer0IntHandler (空)
{
//
//清除计时器中断。
//
TimerIntClear (TIMER0_BASE、TIMER_TINA_TIMEOUT);
ADCProcessorTrigger (ADC1_base、2);
ADCProcessorTrigger (ADC0_BASE、0);
}
///------------------------------------------------