该芯片支持I2C和SPI读写寄存器,本人用的是SPI1接口。

以下是对手册中SPI接口读写寄存器相关内容的翻译(英文版可以看手册的94页~)

在SPI控制模式下,TLV320AIC3268使用SCL_SSZ作为片选信号 ,I2C_ADDR_SCLK 作为 SCLK,MISO_GPO1 作为 MISO, SDA_MOSI 作为 MOSI; CPOL = 0 CPHA = 1。
SPI接口支持主从设备间的全双工、同步、串行通信。SPI主设备产生同步时钟(SCLK)并且启动传输。字节从主机出发沿着MOSI线伴随SCK时钟控制发出,当一个字节沿着MOSI发送给从机时,从机同时沿着MISO回传一个字节。 
TLV320AIC3268需要设置CPHA=1,所以主设备驱动MOSI和从设备驱动MISO都是在第一个串行时钟边沿, SSZ片选信号在传输过程中需要一直保持低电平。
TLV320AIC3268只把SSZ拉低后的头8位当作控制命令,并且当写寄存器的时候接下来8位是要写入的数据。 
TLV320AIC3268完全通过寄存器配置。 读写这些寄存器需要由主机发送一个8位的命令. 命令的格式参照 Table 43。 头7位是要读写寄存器的地址(从0到127,十进制),最后一位是读写位。

下面是对寄存器读写操作的代码样例(仅供参考)

/**********************************************************
函数名称 : AIC3268_Set_Book
入口参数 : Book 需要操作的Book
返回参数 : None
功能介绍 : 实现对 对 AIC3268 的操作 切换Book
**********************************************************/
void AIC3268_Set_Book(u8 Book)
{ AIC3268_Set_Page(); //切换到page0 AIC3268_CS_LOW;
preBook = Book;
SPI1_ReadWriteByte(<< & 0xfe); //定位第127个寄存器
SPI1_ReadWriteByte(Book);
AIC3268_CS_HIGH;
}
/**********************************************************
函数名称 : AIC3268_Set_Page
入口参数 : Page 需要操作的页
返回参数 : None
功能介绍 : 实现对 对 AIC3268 的操作 切换页
**********************************************************/
void AIC3268_Set_Page(u8 Page)
{
AIC3268_CS_LOW;
prePage = Page;
SPI1_ReadWriteByte(<< & 0xfe); //定位第0个寄存器
SPI1_ReadWriteByte(Page);
AIC3268_CS_HIGH;
}
/**********************************************************
函数名称 : AIC3268_Write_Byte
入口参数 :u32 reg 24位寄存器地址; u8 val 寄存器数值
返回参数 :None
功能介绍 :函数实现了对单个寄存器的写入操作在
写寄存器之前需要设置写入的book,page 用户不要调用这个函数
**********************************************************/
void AIC3268_Write_Byte(u32 addr,u8 val)
{
AIC3268_Check_Book(addr>>); //检查是否切换Book
AIC3268_Check_Page((addr>>)&0x00ff);//检查是否切换Page preReg = addr&0x0000ff; //计算当前操作的寄存器 AIC3268_CS_LOW;
SPI1_ReadWriteByte(preReg<< & 0xfe);
SPI1_ReadWriteByte(val);
AIC3268_CS_HIGH;
}
/**********************************************************
函数名称 : AIC3268_Write_Half_Word
入口参数 :u32 first_reg 第一个寄存器的地址; u16 val 寄存器数值
返回参数 :None
功能介绍 :函数实现了对两个寄存器的连续写入操作在
写寄存器之前需要设置写入的book,page 用户不要调用这个函数
**********************************************************/
void AIC3268_Write_Half_Word(u32 first_reg,u16 val)
{
AIC3268_Check_Book(first_reg>>); //检查是否切换Book
AIC3268_Check_Page((first_reg>>)&0x00ff);//检查是否切换Page preReg = first_reg&0x0000ff; //计算当前操作的寄存器 AIC3268_CS_LOW;
SPI1_ReadWriteByte((uint8_t)(preReg<< & 0xfe));
SPI1_ReadWriteByte((uint8_t)((val&0xff00)>>)); //SPI1_ReadWriteByte((uint8_t)(preReg<<1 & 0xfe));
SPI1_ReadWriteByte((uint8_t)((val&0x00ff)));
AIC3268_CS_HIGH;
}
/**********************************************************
函数名称 :AIC3268_Read_Byte
入口参数 :u32 addr 寄存器的地址
返回参数 :u8 val 寄存器的数据
功能介绍 :函数实现了对单个寄存器的数据的读取
读取之前需要先选中book,page
**********************************************************/
u8 AIC3268_Read_Byte(u32 addr)
{
u8 val = ;
AIC3268_Check_Book((u8)addr>>);
AIC3268_Check_Page((u8)((addr>>)&0x00ff)); preReg = addr&0x0000ff; AIC3268_CS_LOW;
SPI1_ReadWriteByte(preReg<< | 0x01);
val = SPI1_ReadWriteByte(DUMMY);
AIC3268_CS_HIGH;
return val;
}
/**********************************************************
函数名称 :AIC3268_Show_Regs
入口参数 :u8 Book 寄存器所在的Book
u8 Page 寄存器所在的Page
返回参数 :无
功能介绍 :函数实现了将特定Book、Page中所有寄存器的数值打印
到串口
**********************************************************/
void AIC3268_Show_Regs(u8 Book,u8 Page)
{
u8 i = ; AIC3268_Check_Book(Book);
AIC3268_Check_Page(Page); for(i=;i<=;i++)
{
AIC3268_CS_LOW;
SPI1_ReadWriteByte(i<< | 0x01);
printf("in book %d,page %d,reg %d(0x%x),val = %d\n",Book,Page,i,i,SPI1_ReadWriteByte(DUMMY));
AIC3268_CS_HIGH;
} }
/**********************************************************
函数名称 :AIC3268_Check_Book
入口参数 :u8 Book 寄存器所在的Book
返回参数 :无
功能介绍 :函数实现了检查操作当前的寄存器需不需要切换Book
**********************************************************/
void AIC3268_Check_Book(u8 Book)
{
if(Book != preBook)
{
//preBook = Book;
AIC3268_Set_Book(Book);
} }
/**********************************************************
函数名称 :AIC3268_Check_Page
入口参数 :u8 Page 寄存器所在的Page
返回参数 :无
功能介绍 :函数实现了检查操作当前的寄存器需不需要切换Page
**********************************************************/
void AIC3268_Check_Page(u8 Page)
{
if(Page != prePage)
{
//prePage = Page;
AIC3268_Set_Page(Page);
} }

TLV320AIC3268寄存器读写的更多相关文章

  1. 痞子衡嵌入式:i.MXRT1010, 1170型号上不一样的SNVS GPR寄存器读写控制设计

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1010, 1170型号上不一样的SNVS GPR寄存器读写控制设计. 痞子衡之前两篇文章 <在SBL项目实战中妙用i ...

  2. [RK3288][Android6.0] 调试笔记 --- pmu(rk818)寄存器读写【转】

    本文转载自:http://blog.csdn.net/kris_fei/article/details/76919134 Platform: Rockchip OS: Android 6.0 Kern ...

  3. ARM汇编语言(3)(寄存器读写控制外设)

    DAY4:ARM汇编(4) 一,GPIO编程     连接内存(二级cache),用来寻址:连接外设,用来控制:   1,GPIO,General-Purpose IO ports,通用输入输出端口, ...

  4. Matlab优化存储器读写来改善程序性能

    最近用Matlab写程序的时候终于遇到了程序执行效率的问题,于是在Google上面搜索了一篇提高代码性能的文章,简单的概括一下. 文章是通过优化寄存器读写来提高执行速度的,主要体现在三个方面: 在做循 ...

  5. 射频识别技术漫谈(22)——RC系列射频芯片的寄存器操作

    前面提到,RC系列内部64个寄存器的正确操作是软件编写的关键.正确设置寄存器首先要做到与寄存器正确通信,其次是要对寄存器写入正确的值. RC系列射频芯片与微控制器的接口有并口和SPI接口两种类型.显然 ...

  6. 痞子衡嵌入式:对比i.MXRT与LPC在RTC外设GPREG寄存器使用上的异同

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是对比i.MXRT与LPC在RTC外设GPREG寄存器使用上的异同. 本篇是 <在SBL项目实战中妙用i.MXRT1xxx里Syst ...

  7. DM9000驱动移植在mini2440(linux2.6.29)和FS4412(linux3.14.78)上的实现(deep dive)篇一

    关于dm9000的驱动移植分为两篇,第一篇在mini2440上实现,基于linux2.6.29,也成功在在6410上移植了一遍,和2440非常类似,第二篇在fs4412(Cortex A9)上实现,基 ...

  8. 浅谈CPU和GPU的区别

    导读: CPU和GPU之所以大不相同,是由于其设计目标的不同,它们分别针对了两种不同的应用场景.CPU需要很强的通用性来处理各种不同的数据类型,而GPU面对的则是类型高度统一的.相互无依赖的大规模数据 ...

  9. 搭建基于 STM32 和 rt-thread 的开发平台

    我们需要平台 如果说,SharePoint 的价值之一在于提供了几乎开箱即用的 innovation 环境,那么,智能设备的开发平台也一样.不必每次都从头开始,所以需要固定的工作室和开发平台作为创新的 ...

随机推荐

  1. Thinking - 一些有效阅读的方法

    有策略,忌盲目.讲方法,别蛮干! 1- 阅读方法 1.1 做好眼前事 排除其他事项干扰,营造适合阅读的状态和环境,专注地投入阅读之中. 如果被一堆乱糟糟的事情烦扰,身心处于一个疲惫的状态,必然无法保持 ...

  2. 教你用免费的hihttps开源WEB应用防火墙阻止暴力破解密码

    教你用免费的hihttps开源WEB应用防火墙阻止暴力破解密码 很多企业都有自己的网站,需要用户登录后才能访问,但有大量的黑客攻击软件可以暴力破解网站密码,即使破解不了也非常恶心.有没有免费的解决办法 ...

  3. NET中的规范标准注释-- XML注释标签讲解

    一.摘要 .Net允许开发人员在源代码中插入XML注释,这在多人协作开发的时候显得特别有用. C#解析器可以把代码文件中的这些XML标记提取出来,并作进一步的处理为外部文档. 这篇文章将展示如何使用这 ...

  4. CentOS 7 利用qemu模拟ARM vexpress A9开发板

    听说qemu用于仿真arm很不错,今日就来试了一把.由于刚刚开始,了解的并不多.本文仅仅记录Qemu装载Linux kernel和busybox根文件系统的过程.后续将会深入了解仿真的其他内容. 先上 ...

  5. [Agc029D]Grid game_贪心

    Grid game 题目链接:https://atcoder.jp/contests/agc029/tasks/agc029_d 数据范围:略. 题解: 方法肯定很简单,就是找一处障碍待在他上面就好. ...

  6. Spring mybatis源码篇章-Mybatis的XML文件加载

    通过阅读源码对实现机制进行了解有利于陶冶情操,承接前文Spring mybatis源码篇章-Mybatis主文件加载 前话 前文主要讲解了Mybatis的主文件加载方式,本文则分析不使用主文件加载方式 ...

  7. Oracle参数文件修改

    初始化参数文件有两种,文本初始化参数文件 pfile 和二进制初始化参数文件 spfile.   动态参数文件spfile 这是Oracle推荐的初始化参数文件类型.这是一个可以写入和读取的二进制文件 ...

  8. DP_Wooden Sticks

    There is a pile of n wooden sticks. The length and weight of each stick are known in advance. The st ...

  9. 前端模拟数据接口json-server

    今天要找帮前端找一个可以实现数据接口模拟的工具.首先看到的mock.js这个.但是这个需要在页面里插入Mock.js我是要给小程序使用,所以不能这么插入.然后又找到了json-server这个Node ...

  10. python 修改文件的创建时间、修改时间、访问时间

    目录 python 修改文件创建.修改.访问时间 方案一 方案二(无法修改文件创建时间) python 修改文件创建.修改.访问时间 突如其来想知道一下 python 如何修改文件的属性(创建.修改. ...