工具/软件:Code Composer Studio
您好,TI朋友。 我从TMS320F2.8335万开始,我´m´m新的代码编写器。 我有两个问题:
1.我运行了C200Ware中可用的顺序模式测试示例,我认为运行良好。 如何´m存储ADCINA0输入模拟电压的ADCRESULT0的值。 我能以二进制方式看到它吗? 要将此值转换为十进制值,是否必须对此操作进行编码? 或者有一个函数可以用于此操作? 感谢你的帮助。
2.我需要1 mV的分辨率来读取输入电压,但ADC 只有12位,所以不可能。 是否可以通过使用此F2.8335万器件来提高ADC conversión的位数?
这是代码:
//包含的文件
//
#include "DSP28x_Project.h"//设备头文件和示例包括文件
//
//定义ADC启动参数
//
#IF (CPU_FRQ_150MHz)//默认值- 150 MHz SYSCLKOUT
//
// HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 150/(2*3)= 25.0 MHz
//
#define ADC_MODCLK 0x3
#endif
#IF (CPU_FRQ_100MHz)
//
// HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 =100/(2*2)= 25.0 MHz
//
#define ADC_MODCLK 0x2
#endif
//
// ADC模块时钟= HSPCLK/2*ADC_CKPS = 25.0MHz/(1*2)= 12.5MHz
//
#define ADC_CKPS 0x1
#define ADC_SHCLK 0xF //在ADC模块周期中的S/H宽度=16 ADC时钟
#define AVG 1000 //平均样品限制
#define zOffset 0x00 //平均零偏移
#define BUF_SIZE 2048 //样本缓冲区大小
//
//全局
//
UINT16 SampleTable[BUF_SIZE];
//
//主菜单
//
Void主(void)
{
UINT16 I;
//
//步骤1. 初始化系统控制:
// PLL,看门狗,启用外设时钟
//此示例函数位于DSP2833x_sysctrl.c文件中。
//
InitSysCtrl();
//
//此示例的特定时钟设置
//
EALLOW;
SysCtrlRegs.HISPPCP.ALL = ADC_MODCLK;// HSPCLK = SYSCLKOUT/ADC_MODCLK
EDIS;
//
//步骤2. 初始化GPIO:
//此示例函数可在DSP2833x_GPIO.c文件和中找到
//说明了如何将GPIO设置为其默认状态。
//
// InitGpio();//跳过此示例
//
//步骤3. 清除所有中断并初始化PIE矢量表:
//禁用CPU中断
//
色调;
//
//将PIE控件寄存器初始化为其默认状态。
//默认状态是禁用所有PIE中断和标志
//被清除。
//此函数位于DSP2833x_PIECTRL.c文件中。
//
InitPieCtrl();
//
//禁用CPU中断并清除所有CPU中断标志
//
IER = 0x0000;
IFR = 0x0000;
//
//使用指向外壳中断的指针初始化PIE矢量表
//服务例程(ISR)。
//这将填充整个表,即使中断也是如此
//在本例中不使用。 这对于调试非常有用。
// shell ISR例程可在DSP2833x_DefaultIsr.C.中找到
//此函数位于DSP2833x_PieVect.C.中
//
InitPieVectorTable();
//
//步骤4. 初始化所有设备外围设备:
//此函数位于DSP2833x_InitPeripherals.c中
//
// InitPeripherals();//本示例不需要
InitAdc();//在此示例中,初始化ADC
//
//此示例的特定ADC设置:
//
AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK;
AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS;
AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;// 1级联模式
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0;
AdcRegs.ADCTRL1.bit.con_run =1;//设置连续运行
//
//步骤5. 用户特定代码,启用中断:
//
//
//清除SampleTable
//
对于(i=0;i<BUF_SIZE;i++)
{
SampleTable[i]= 0;
}
//
//启动SEQ1
//
AdcRegs.ADCTRL2.all = 0x2000;
//
//获取ADC数据并记录In SampleTable数组
//
对于(;;)
{
用于(i=0;i<AVG;i++)
{
//
//等待中断
//
while (AdcRegs.ADCST.bit.INT_SEQ1= 0)
{
}
AdcRegs.ADCST.Bit.INT_SEQ1_CLR = 1;
SampleTable[i]=((AdcRegs.ADCRESULT0>>4));
}
}
}
//
//文件结束
//