系统时钟源的选择

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/****************************************** ******************************************* *********************

* 文件名:iic.C

* 功能:实验二 GPIO控制实验

* 该实验采用CC2530的I/O口(P1.0和P1.1)模拟IIC总线的SCL和SDA,然后通过IIC 总线形式控制GPIO扩展芯片

* PCA9554,最后通过扩展的IO来控制LED的亮灭。

*

* 硬件连接:将OURS的CC2530RF模块插入到普通电池板或智能电池板上。

*

* P1.0 ------ SCL

* P1.1 ------ SDA

*

* 版本:V1.0

* 作者:WUXIANHAI

* 日期:2011.1.18

* 奥尔斯电子主页:

******************************************* ******************************************* ************************/

#include "ioCC2530.h"

#include "hal_mcu.h"

#define SCL P1_0 //IIC时钟线#define SDA P1_1 //IIC数据线

//定义IO方向控制函数

#define IO_DIR_PORT_PIN(port, pin, dir) \ do { \ if (dir == IO_OUT) \ P##port##DIR |= (0x01<<(pin)); \ else \ P##port##DIR &= ~(0x01<<(pin)); \ }while(0)

#define OSC_32KHZ 0x00 //使用外部32K晶体振荡器//时钟设置函数

#define HAL_BOARD_INIT() \

{

\

uint16 i; \

\

SLEEPCMD &= ~OSC_PD; /* 开启 16MHz RC 和32MHz XOSC */ \

while (!(SLEEPSTA & XOSC_STB));

/* 等待 32MHz XOSC 稳定 */ \

asm("NOP"); \

for (i=0; i<504; i++) asm("NOP");

/* 延时63us*/ \

CLKCONCMD = (CLKCONCMD_32MHZ | OSC_32KHZ);

/* 设置 32MHz XOSC 和 32K 时钟 */ \

while (CLKCONSTA != (CLKCONCMD_32MHZ |

OSC_32KHZ)); /* 等待时钟生效*/

\

SLEEPCMD |= OSC_PD; /* 关闭 16MHz RC */ \

}

#define IO_IN 0 //输入

#define IO_OUT 1 //输出

uint8 ack; //应答标志位

uint8 PCA9554ledstate = 0; //所有LED当前状

/******************************************

************************************

* 函数名称:QWait

*

* 功能描述:1us的延时

*

* 参数:无

*

* 返回值:无

*******************************************

**********************************/

void QWait()

{

asm("NOP");asm("NOP");

asm("NOP");asm("NOP");

asm("NOP");asm("NOP");

asm("NOP");asm("NOP");

asm("NOP");asm("NOP");

asm("NOP");

}

/****************************************** ************************************

* 函数名称:Wait

*

* 功能描述:ms的延时

*

* 参数:ms - 延时时间

*

* 返回值:无

******************************************* **********************************/

void Wait(unsigned int ms)

{

unsigned char g,k;

while(ms)

{

for(g=0;g<=167;g++)

{

for(k=0;k<=48;k++);

}

ms--;

}

}

/****************************************** ************************************

* 函数名称:Start_I2c

*

* 功能描述:启动I2C总线,即发送I2C起始条件. *

* 参数:无 *

* 返回值:无

******************************************* **********************************/

void Start_I2c()

{

IO_DIR_PORT_PIN(1, 0, IO_OUT); //设置P1.0为输出

IO_DIR_PORT_PIN(1, 1, IO_OUT); //设置P1.1为输出

SDA=1; /*发送起始条件的数据信号*/

asm("NOP");

SCL=1;

QWait(); /*起始条件建立时间大于4.7us,延时*/

QWait();

QWait();

QWait();

QWait();

SDA=0; /*发送起始信号*/ QWait(); /* 起始条件锁定时间大于4μs*/

QWait();

QWait();

QWait();

QWait();

SCL=0; /*钳住I2C总线,准备发送或接收数据 */

asm("NOP");

asm("NOP");

}

/****************************************** ************************************

* 函数名称:Stop_I2c

*

* 功能描述:结束I2C总线,即发送I2C结束条件. *

* 参数:无

*

* 返回值:无

相关文档
最新文档