请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TM4C123GH6PM 工具/软件:Code Composer Studio
将 mcp4725 DAC 与 Tiva 连接以将数字输入(0至4096)转换为模拟值(0-3.3、因为 DAC 的 VCC 连接到+3.3V)。以下错误(#112-D 语句不可访问)出现在最后一个代码行附近[ I2CMasterControl (I2C0_BASE、 I2C_MASTER_CMD_BURST_SEND_FINISH);]并且可以使用同一命令发送单个值、而不是像下面的程序中那样在循环中发送多个值吗?
对于以下程序、DAC 的输出持续为1.64V
/*定义布尔和整数数据类型*/
#include
#include
/*定义存储器和外设的基址*/
#include "inc/hw_memmap.h"
//定义通用类型和宏*/
#include "inc/hw_types.h"
//为 I2C 定义和
定义宏*/#include "inc/hw_i2c.h"#include "driverlib/i2c.h"//*包含系统驱动程序和#driverlib/systrl" GPIO API */
#include "driverlib/gpio.h"
#define SLAVE_ADDRESS 0x60
// 512值数组(包含一个时间段的12位正弦值)*/
unsigned int sine_9Bit[512]=
{
2048、2073、2098、2123、2148、 2174、2199、2224、
2249、2274、 2299、2324、2349、2373、2398、 2423、
2448、2472、2497、2521、 2546、2570、2594、2618、
2643、 2667、2690、2714、2738、2762、 2785、2808、
2832、2855、2878、 2901、2924、2946、2969、2991、
3013、3036、3057、3079、3101、 3122、3144、3165、
3186、3207、 3227、3248、3268、3288、3308、 3328、
3347、3367、3386、3405、 3423、3442、3460、3478、
3496、 3514、3531、3548、3565、3582、 3599、3615、
3631、3647、3663、 3678、3693、3708、3722、3737、
3751、3765、3778、3792、3805、 3817、3830、3842、
3854、3866、 3877、3888、3899、3910、3920、 3930、
3940、3950、3959、3968、 3976、3985、3993、4000、
4008、 4015、4022、4028、4035、4041、 4046、4052、
4057、4061、4066、 4070、4074、4077、4081、4084、
4086、4088、4090、4092、4094、 4095、4095、4095、
4095、4095、 4095、4095、4094、4092、4090、 4088、
4086、4084、4081、4077、 4074、4070、4066、4061、
4057、 4052、4046、4041、4035、4028、 4022、4015、
4008、4000、3993、 3985、3976、3968、3959、3950、
3940、3930、3920、3910、3899、 3888、3877、3866、
3854、3842、 3830、3817、3805、3792、3778、 3765、
3751、3737、3722、3708、 3693、3678、3663、3647、
3631、 3615、3599、3582、3565、3548、 3531、3514、
3496、3478、3460、 3442、3423、3405、3386、3367、
3347、3328、3308、3288、3268、 3248、3227、3207、
3186、3165、 3144、3122、3101、3079、3057、 3036、
3013、2991、2969、2946、 2924、2901、2878、2855、
2832、 2808、2785、2762、2738、2714、 2690、2667、
2643、2618、2594、 2570、2546、2521、2497、2472、
2448、2423、2398、2373、2349、 2324、2299、2274、
2249、2224、 2199、2174、2148、2123、2098、 2073、
2048、2023、1998、1973、 1948、1922、1897、1872、
1847、 1822、1797、1772、1747、1723、 1698、1673、
1648、1624、1599、 1575、1550、1526、1502、1478、
1453、1429、1406、1382、1358、 1334、1311、1288、
1264、1241、 1218、1195、1172、1150、1127、 1105、
1083、1060、1039、1017、 995、974、952、931、
910、 889、869、848、828、808、 788、768、
749、729、710、 691、673、654、636、618、
600、582、565、548、531、 514、497、481、
465、449、 433、418、403、388、374、 359、
345、331、318、304、 291、279、266、254、
242、 230、219、208、197、186、 176、166、
156、146、137、 128、120、111、103、96、
88、81、74、68、61、 55、50、44、
39、35、 30、26、22、19、15、 12、
10、8、6、4、 2、1、1、0、
0、 0、1、1、2、4、 6、8、
10、12、15、 19、22、26、30、35、
39、44、50、55、61、 68、74、81、
88、96、 103、111、120、128、137、 146、
156、166、176、186、 197、208、219、230、
242、 254、266、279、291、304、 318、331、
345、359、374、 388、403、418、433、449、
465、481、497、514、531、 548、565、582、
600、618、 636、654、673、691、710、 729、
749、768、788、808、 828、848、869、889、
910、 931、952、974、995、1017、 1039、1060、
1083、1105、1127、 1150、1172、1195、1218、1241、
1264、1288、1311、1334、1358、 1382、1406、1429、
1453、1478、 1502、1526、1550、1575、1599、 1624、
1648、1673、1698、1723、 1747、1772、1797、1822、
1847、 1872、1897、1922、1948、1973、 1998、2023
};
unsigned char value1、value2;
//通过 I2C *在8位数据包中传输12位正弦值//
void DAC_data (unsigned int value)
{
Value1 = value/256;
Value2 =值%256;
I2CMasterDataPut (I2C0_BASE、value1);
I2CMasterControl (I2C0_BASE、I2C_MASTER_CMD_BURST_SEND_CONT);
while (I2CMasterBusy (I2C0_BASE))
{
}
I2CMasterDataPut (I2C0_BASE、value2);
I2CMasterControl (I2C0_BASE、I2C_MASTER_CMD_BURST_SEND_CONT);
while (I2CMasterBusy (I2C0_BASE))
{
}
}
int main (void)
{
unsigned int i;
/*使用 PLL 将时钟设置为80MHz */
SysCtlClockSet (SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |
SYSCTL_XTAL_16MHz);
/*启用 GPIO 端口 B */
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB);
/*启用外设 I2C 模块0 */
SysCtlPeripheralEnable (SYSCTL_Periph_I2C0);
/*使 I2C 引脚受外设控制*/
GPIOPinTypeI2C (GPIO_PORTB_BASE、GPIO_PIN_2 | GPIO_PIN_3);
GPIOPinTypeI2CSCL (GPIO_PORTB_BASE、GPIO_PIN_2);
/*禁用 I2C 模块0 */
I2CMasterDisable (I2C0_BASE);
/*设置 I2C 模块0的配置*/
对于400Kbps,/*参数“true”;对于100Kbps 模式,参数“false”*/
I2CMasterInitExpClk (I2C0_BASE、SysCtlClockGet ()、true);
/*设置要与之通信的 I2C 模块(主器件)的从器件地址*/
I2CMasterSlaveAddrSet (I2C0_BASE、SLAVE_ADDRESS、FALSE);
/*开始突发数据传输*/
I2CMasterControl (I2C0_BASE、I2C_MASTER_CMD_BURST_SEND_START);
for (i=0;i<512;i++)
{
DAC_DATA (sine_9BIT[i]);
}
/*完成数据的突发传输*/
/*由于上面的循环永远不会结束循环,因此此语句永远不会执行*/
I2CMasterControl (I2C0_BASE、I2C_MASTER_CMD_BURST_SEND_FINISH);
}
