上一博文已经基本上了解IIC的基础知识,其实我自己还有几个知识盲点,因为我是学完51后,接触了msp430,然后用430做了一个项目之后,直接玩OK6410的所以感觉有许多知识都不是很了解,下面先把我的几个知识盲点列出来,高手直接忽视~~·
1、首先我们分析这个程序的时候,需要用到串口打印ROM里面的数据信息,所以串口初始化不必多说(注意:即使是串口的初始化也是对GPIO进行操作,我发现很多硬件设备都是对GPIO进行操作的)代码如下:
void USART0_GPIO_Config()
{
//PORT A GROUP
//BIT [31:28] [27:24] [23:20] [19:16] [15:12] [11:8] [7:4] [3:0]
//CONFIG 0010 0010 0010 0010 0010 0010 0010 0010
//Function RTSn1 CTSn1 RTXD1 RXD1 RTSn0 CTSn0 TXD0 RXD0
rGPACON &= ~(0x22222222);
rGPACON |= (0x22222222);
rGPAPUD=0x00; //上下拉电阻禁止
}
2、配置完GPIO口之后就是配置串口了(对波特率、8N1等等的设置),不再赘述,上代码void UART0_Configration(u32 baud)
{
rULCON0= 0x03; //8bit no parity one stop
//---rUCON0[0:3]=0101:表示接收数据和发送数据采用//中断产生方式或者查询方式,1010或者1111表示//DMA传送模式
rUCON0=0x805; //时钟源采用PCLK,中断为脉冲方式,不产生接收错
//状态中断,发射接收均为正常模式
rUFCON0=0x0; //FIFO禁止
rUMCON0=0x0; //FIFO禁止禁止modem中断,RTS无效
rUBRDIV0 = (u32)((PCLK/baud/16)-1);//时钟分频
rUDIVSLOT0=(u32)((((float)(PCLK/baud/16)-1)-rUBRDIV0)*16);//分频值的小数
}
3、接下来就是这节的重点了,也就是IIC的测试了
首先来分析一个串口打印函数
voidUART_Printf(const char *fmt,...)
{
va_list ap; //初始化指向可变参数列表的指针
char string[256];
int i;
va_start(ap,fmt); //将第一个可变参数的地址付给ap,即ap指向变参数列表的开始
vsprintf(string, fmt, ap); //将参数fmt、ap指向的可变参数一起转换成格式化//字符串,放string数组中,其作用同sprintf(),只//是参数类型不同
for (i = 0; string[i]; i++) //把格式化字符串从串口送出去
sendchar(string[i]);
va_end(ap); //ap赋值为0结束
}
上面提到的可变参数列表就是(const char *fmt,...),"..."表示可变参数(多个可变参数组成一个列表,后面有专门的指针指向他),不限定个数和类型
不知道大家看到这段代码的是什么想法,对于我这种小白来说,以前对VA这个函数了解很浅很浅,这节就不多讨论VA这个函数了,百度搜索能搜到大把。
while(!(rUTRSTAT0& 0x2))表示判断是否为空,空则往下执行(空就是表示,发送缓冲器里面没有数据,此时就可以把回车字符送给发送缓冲器了)
这是UTRSTAT0的寄存器
接下来是对IIC进行初始化了,先看硬件部分
然后看相应的代码:
紧接着,需要对IIC的中断进行初始化 ,直接上代码了
代码看不懂的,回去好好补一下C
VIC0VECTADDR[intNum]= (unsigned )isr; 这是一个数组指针
关于IIC,其实我也还有比较多的地方不怎么明白,主要是中断那部分,中断的那部分,不知道是从机地址匹配才发生中断,还是怎样的,先这样吧,希望高手指点一下,还有就是发现自己的C真的很差劲呀~~~回家恶补一下!!!!