飞凌OK6410之IIC的学习2

上一博文已经基本上了解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真的很差劲呀~~~回家恶补一下!!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值