主题中讨论的其他器件:SysConfig
大家好。 我正在尝试使用 CC1352P1实现 I2C 从设备。 我要在该器件上激活从模式。
我一直在试验 i2ctmp_CC1352P1_LAUNCHXL_nortos_ticlang 示例代码。
我无法访问/更改寄存器。
到目前为止、我遇到了与我的实施相关的以下线程:
我正在尝试使用中断来控制 I2C 总线上的数据流。 不过、我似乎无法修改和看到某些寄存器值。 下面是调试模式/寄存器的屏幕截图:
我无法更改或看到 SCTL DA 位是什么。 数据表指定该位在设置为1时使能 I2C 从机操作。
器件规格:
- SCL 在引脚16上、SDA 在引脚17上。
- SCL 和 SDA 线连接到主器件的引脚。 这些引脚使用~6K Ω 负载上拉至主器件的3V3引脚。
- 从器件和主器件采用公共接地。
- 主器件可以与另一个器件通信(STM32至 STM32、具有中断功能)。 因此我知道主器件向地址0x3E 发送请求。
包含项目的选项:
我想知道:
- 如何修改 SCTL 寄存器值。
- MTPR 改变的内容。 这是否会影响从器件的运行? 我无法修改该寄存器值。
- 当我定期在 SDR 寄存器上激活主器件时、我不断看到一些垃圾值、如"9F"、"3F"、"FC"等。 为什么它不是0x05或101 (0)? (参考我的代码)
/* * ======== main_nortos.c ======== */ #include <stdint.h> #include <stddef.h> #include <NoRTOS.h> #include <ti/drivers/Board.h> #include <unistd.h> /* Driver Header files */ #include <ti/drivers/GPIO.h> /* Driver configuration */ #include "ti_drivers_config.h" /* User includes */ #include "i2c_protocol.h" #include "i2c_registers.h" #include "D:/ccs/simplelink_cc13xx_cc26xx_sdk_6_41_00_17/source/ti/devices/cc13x2_cc26x2/driverlib/prcm.h" extern uint8_t aTxBuffer[]; #define TASKSTACKSIZE 640 /*User function prototypes*/ void I2C_Slave_Command(void); void Init_I2C_Slave(void); /* * ======== mainThread ======== */ int mainThread(void ) { /* Call driver init functions */ GPIO_init(); // HWREG(GPIO_BASE + 0x48) |= (1 << 0) | (1 << 8); // GPIO initialization example (it works!) /* Configure the LED and if applicable, the TMP_EN pin */ GPIO_setConfig(CONFIG_GPIO_LED_0, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW); /*TRYING new implementation*/ return 0; } /* * ======== main ======== */ I2C_Params i2cParams; I2C_Handle i2cHandle; // Declare handle for I2C module int main(void) { Board_init(); /* Start NoRTOS */ NoRTOS_start(); Init_I2C_Slave(); /* Call mainThread function */ mainThread(); while (1) { // Run continuously } } void i2c_callback(void) { uint32_t status = I2CSlaveIntStatus(I2C0_BASE, true); I2CSlaveIntClear(I2C0_BASE, status); if(status & I2C_SLAVE_INT_DATA) { while( I2CSlaveStatus(I2C0_BASE) & I2C_SLAVE_ACT_TREQ) { I2CSlaveDataPut(I2C0_BASE, 0x05); // send stuff GPIO_toggle(CONFIG_GPIO_LED_0); } } } void Init_I2C_Slave() { // Initialize I2C module i2cHandle = I2C_open(0, &i2cParams); // i2c_open defaults to master mode? I2CMasterDisable(I2C0_BASE); // discard master settings // Enable Slave operation I2CSlaveEnable(I2C0_BASE); I2CSlaveIntEnable(I2C0_BASE, I2C_SLAVE_INT_START | I2C_SLAVE_INT_STOP | I2C_SLAVE_INT_DATA); I2CIntRegister(I2C0_BASE, i2c_callback); // Enable Serial Power Domain PRCMPeripheralRunEnable(PRCM_PERIPH_I2C0); PRCMPeripheralSleepEnable(PRCM_PERIPH_I2C0); HWREG(PRCM_BASE + I2CCLKGR) |= (1 << 0) | (1 << 8); // clk config // Mandatory Load PRCM settings HWREG(PRCM_BASE + CLKLOADCTL) |= (1 << 0); // Configure IOC module to use I2C pins IOCPinTypeI2c(I2C0_BASE, Board_I2C_SDA, Board_I2C_SCL); // Write the slave address HWREG(I2C0_BASE + I2C_SOAR) = 0x3E; // 0x3E }
请帮帮我。