本帖最后由 liam_lee 于 2012-9-3 22:20 编辑
基于cox的代码在各个厂商的M0/M3芯片上移植,几乎是零修改,只需要根据具体硬件连接在头文件里面进行pin等相关配置,就可以完全复用, 因此基于cox开发的外围驱动(LCD, SD, Sensor等等)都是完全复用的,基于cox开发的arduino shield驱动也都是可复用的。并且这不影响用户应用层代码的特性,因为cox还提供了芯片特有特性的APIs。
详细可以到github上查看各个系列各个芯片下面外设的样例,也可以到CoIDE下面直接添加使用。
下面分享一段代码片段,一个基于cox的I2C代码样例:
void I2CExample(void)
{
//
// 设置系统时钟,用主时钟,外部8M晶振
//
xSysCtlClockSet(72000000, xSYSCTL_OSC_MAIN | xSYSCTL_XTAL_8MHZ);
//
// 以I2C_BASE为参数使能I2C外设
//
xSysCtlPeripheralEnable2(ulMaster);
xSysCtlPeripheralReset2(ulMaster);
//
// 施能GPIO,AFIO
//
xSysCtlPeripheralEnable2(xGPIO_PORTC_BASE);
xSysCtlPeripheralEnable(SYSCTL_PERIPH_AFIO);
//
// I2C功能管脚配置,参数是管脚功能名,Short pin
//
xSPinTypeI2C(I2C0SCK, PC4);
xSPinTypeI2C(I2C0SDA, PC5);
//
// I2C初始化并使能
//
xI2CMasterInit(ulMaster, 400000);
xI2CMasterEnable(ulMaster);
//
// 非阻塞的发送地址和第一个数据
//
xI2CMasterWriteS1(ulMaster, 0x12, 'a', xfalse);
//
// 非阻塞的发送数据
//
xI2CMasterWriteS2(ulMaster, 'b', xfalse);
xI2CMasterWriteS2(ulMaster, 'c', xfalse);
xI2CMasterWriteS2(ulMaster, 'd', xfalse);
//
// 阻塞性的读取地址为0x12从机上的数据
//
xI2CMasterReadBufS1(ulMaster, 0x12, ucTemp, 5, xtrue);
}
上面这个代码样例,无论是在nuvoton,st,TI, Freescale,nxp,atmel,holtek等等所有的arm cortex m0/m0+/m3/m4上都是完全复用,平滑移植的。 |