热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

DSP之I2C(InterICBUS)总线

DSP之I2C(InterICBUS)总线介绍:IIC总线介绍请看这:IIC接口:TMS320C550A包含IIC串口,可工作在100-400Kbps波特率之间,7位地

DSP之 I2C(InterIC BUS)总线介绍:
IIC总线介绍请看这:

IIC接口:

TMS320C550A包含IIC串口,可工作在100-400Kbps波特率之间,7位地址模式,该芯片包含主发送/接收和副发送/接收模式,可应用于DMA,中断,或者轮询事件。

IIC的时钟模式工作范围为7MHZ-12MHZ。

 

/*
* Copyright (C) 2003 Texas Instruments Incorporated
* All Rights Reserved
*/

#include
#include
#include
#include "myiic.h"
//---------Global data definition---------
Uint16 mask = 1;
Uint16 enable = 1;
Uint16 databyte1[2]={0xA,0xB};
int i=0,x;
Uint16 datareceive[6] = { 0, 0, 0, 0, 0, 0 };
int y;
/* Declare and Initialize an I2C */
I2C_Init myInit = {
0, /* 7 bit address mode */
0x0000, /* own address */
144, /* clkout value (MHZ) */
400, /* a number between 10 and 400 */
0, /* 8 bits/byte to be received or transmitted */
0, /* DLB mode off */
1 /* FREE mode on */
};

/* Declare and Initialize an I2C call Back Structure */
I2C_IsrAddr addr = {
myALIsr,
myNACKIsr,
myARDYIsr,
myRRDYIsr,
myXRDYIsr
};
/* Declare and Initialize an I2C initialization structure */
I2C_Setup Init = {
0, /* 7 bit address mode */
0x0020, /* own address - don‘t care if master */
144, /* clkout value (Mhz) */
400, /* a number between 10 and 400*/
0, /* number of bits/byte to be received or transmitted (8)*/
0, /* DLB mode on*/
1 /* FREE mode of operation on*/
};
//---------Function prototypes---------
/* Reference start of interrupt vector table */
/* This symbol is defined in the file, vectors.s55 */
extern void VECSTART(void);
#pragma CODE_SECTION (taskFunc, "tskSeg");
void taskFunc(void);
void UserMe(void)
{
I2C_init(&myInit);

y = I2C_read(datareceive, /* data buffer */
6, /* receives 6 of bytes of data */
1, /* in master receiver */
0x50, /* S-A-D..(n) D-P mode */
3, /* to from the 0x50 address */
30000, /* with a timeout of 30000 */
0); /* and check for bus busy on */

printf("I2C read: %d\n", y);



}
//---------main routine---------
void main(void)
{
/* Initialize CSL library - This is REQUIRED !!! */
CSL_init(); /* Set IVPD/IVPH to start of interrupt vector table */
/* 设置中断向量表 */
IRQ_setVecs((Uint32)(&VECSTART)); /* Call I2C example task/function */
taskFunc();
}
void taskFunc(void) {
/* Initialize the I2C using the iniitalization structure values */
I2C_setup(&Init);
/* Set call back functions for I2C interrupt events
* IIC structure used to assign functions for each interrupt structure
* hook up the interrupt functions
*/
I2C_setCallback(&addr); /* Enable RRDY interrupt
* Data Receive Ready Interrupt
*/
I2C_eventEnable(I2C_EVT_RRDY);
/* Enable all maskable interrupts */
IRQ_globalEnable(); // Enable interrupts /* Write a data byte to I2C */
x=I2C_write(databyte1, /* data buffer */
1, /* send 1 bytes data */
1, /* in master transmitter */
0x20, /* to the 0x50 slave */
1,30000); /* address with a timeout of 30000 */

if(!x) printf ("\nTEST PASSED\n");
else printf ("\nTEST FAILED\n");
/* Give some time for interrupt to occur */
for(i=0;i<10000;i++){
};
}


 

#ifndef MYIIC_H_
#define MYIIC_H_
extern void myALIsr(void);
extern void myNACKIsr(void);
extern void myARDYIsr(void);
extern void myRRDYIsr(void);
extern void myXRDYIsr(void);
#endif /*MYIIC_H_*/


 

/*
* Copyright (C) 2003 Texas Instruments Incorporated
* All Rights Reserved
*/
/*
*---------myIsrs_i2c1.c---------
* Function definitions for ISR/callBack functions
*/

#include
/* 将函数数据放在名为myisrSeg的代码段中 */
#pragma CODE_SECTION (myALIsr,"myisrSeg");
#pragma CODE_SECTION (myNACKIsr,"myisrSeg");
#pragma CODE_SECTION (myARDYIsr,"myisrSeg");
#pragma CODE_SECTION (myRRDYIsr,"myisrSeg");
void myALIsr()
{
printf("I2C Arbitration Interrupt Occurred\n");
// NOP 指令占一个字节,无实际意义
asm("\tNOP ;====> I2C periodic interrupt routine");
}
void myNACKIsr()
{
printf("I2C NACK Interrupt Occurred\n");
asm("\tNOP ;====> I2C periodic interrupt routine");
}
void myARDYIsr()
{
printf("I2C ARDY Interrupt Occurred\n");
asm("\tNOP ;====> I2C periodic interrupt routine");
}
void myRRDYIsr()
{
printf("I2C RRDY Interrupt Occurred\n");
asm("\tNOP ;====> I2C periodic interrupt routine");
}
void myXRDYIsr()
{
printf("I2C XRDY Interrupt Occurred\n");
asm("\tNOP ;====> I2C periodic interrupt routine");
}


 

欢迎各位浏览本博,相互交流共同提高-

 

 


推荐阅读
  • CentOS 7 中 iptables 过滤表实例与 NAT 表应用详解
    在 CentOS 7 系统中,iptables 的过滤表和 NAT 表具有重要的应用价值。本文通过具体实例详细介绍了如何配置 iptables 的过滤表,包括编写脚本文件 `/usr/local/sbin/iptables.sh`,并使用 `iptables -F` 清空现有规则。此外,还深入探讨了 NAT 表的配置方法,帮助读者更好地理解和应用这些网络防火墙技术。 ... [详细]
  • 在使用Eclipse进行调试时,如果遇到未解析的断点(unresolved breakpoint)并显示“未加载符号表,请使用‘file’命令加载目标文件以进行调试”的错误提示,这通常是因为调试器未能正确加载符号表。解决此问题的方法是通过GDB的`file`命令手动加载目标文件,以便调试器能够识别和解析断点。具体操作为在GDB命令行中输入 `(gdb) file `。这一步骤确保了调试环境能够正确访问和解析程序中的符号信息,从而实现有效的调试。 ... [详细]
  • 在 LeetCode 的“有效回文串 II”问题中,给定一个非空字符串 `s`,允许删除最多一个字符。本篇深入解析了如何判断删除一个字符后,字符串是否能成为回文串,并提出了高效的优化算法。通过详细的分析和代码实现,本文提供了多种解决方案,帮助读者更好地理解和应用这一算法。 ... [详细]
  • 系统数据实体验证异常:多个实体验证失败的错误处理与分析
    在使用MVC和EF框架进行数据保存时,遇到了 `System.Data.Entity.Validation.DbEntityValidationException` 错误,表明存在一个或多个实体验证失败的情况。本文详细分析了该错误的成因,并提出了有效的处理方法,包括检查实体属性的约束条件、调试日志的使用以及优化数据验证逻辑,以确保数据的一致性和完整性。 ... [详细]
  • MySQL的查询执行流程涉及多个关键组件,包括连接器、查询缓存、分析器和优化器。在服务层,连接器负责建立与客户端的连接,查询缓存用于存储和检索常用查询结果,以提高性能。分析器则解析SQL语句,生成语法树,而优化器负责选择最优的查询执行计划。这一流程确保了MySQL能够高效地处理各种复杂的查询请求。 ... [详细]
  • 装饰者模式(Decorator):一种灵活的对象结构设计模式
    装饰者模式(Decorator)是一种灵活的对象结构设计模式,旨在为单个对象动态地添加功能,而无需修改原有类的结构。通过封装对象并提供额外的行为,装饰者模式比传统的继承方式更加灵活和可扩展。例如,可以在运行时为特定对象添加边框或滚动条等特性,而不会影响其他对象。这种模式特别适用于需要在不同情况下动态组合功能的场景。 ... [详细]
  • 本文详细解析了Autofac在高级应用场景中的具体实现,特别是如何通过注册泛型接口的类来优化依赖注入。示例代码展示了如何使用 `builder.RegisterAssemblyTypes` 方法,结合 `typeof(IEventHandler).Assembly` 和 `Where` 过滤条件,动态注册所有符合条件的类,从而简化配置并提高代码的可维护性。此外,文章还探讨了这一方法在复杂系统中的实际应用及其优势。 ... [详细]
  • 本指南详细介绍了如何利用华为云对象存储服务构建视频点播(VoD)平台。通过结合开源技术如Ceph、WordPress、PHP和Nginx,用户可以高效地实现数据存储、内容管理和网站搭建。主要内容涵盖华为云对象存储系统的配置步骤、性能优化及安全设置,为开发者提供全面的技术支持。 ... [详细]
  • 在分析和解决 Keepalived VIP 漂移故障的过程中,我们发现主备节点配置如下:主节点 IP 为 172.16.30.31,备份节点 IP 为 172.16.30.32,虚拟 IP 为 172.16.30.10。故障表现为监控系统显示 Keepalived 主节点状态异常,导致 VIP 漂移到备份节点。通过详细检查配置文件和日志,我们发现主节点上的 Keepalived 进程未能正常运行,最终通过优化配置和重启服务解决了该问题。此外,我们还增加了健康检查机制,以提高系统的稳定性和可靠性。 ... [详细]
  • 在 iOS 开发中,经常会遇到 `@(YES)`、`@[firstViewController]` 以及 `@{@a:@b}` 这样的语法糖。这些简化的写法分别用于初始化布尔值、数组和字典对象,能够显著提高代码的可读性和编写效率。例如,`@(YES)` 可以快速创建一个布尔值对象,`@[firstViewController]` 则用于创建包含单个元素的数组,而 `@{@a:@b}` 则用于创建键值对字典。理解这些语法糖的使用方法,有助于开发者更加高效地进行编码。 ... [详细]
  • Unity3D 中 AsyncOperation 实现异步场景加载及进度显示优化技巧
    在Unity3D中,通过使用`AsyncOperation`可以实现高效的异步场景加载,并结合进度条显示来提升用户体验。本文详细介绍了如何利用`AsyncOperation`进行异步加载,并提供了优化技巧,包括进度条的动态更新和加载过程中的性能优化方法。此外,还探讨了如何处理加载过程中可能出现的异常情况,确保加载过程的稳定性和可靠性。 ... [详细]
  • 在Conda环境中高效配置并安装PyTorch和TensorFlow GPU版的方法如下:首先,创建一个新的Conda环境以避免与基础环境发生冲突,例如使用 `conda create -n pytorch_gpu python=3.7` 命令。接着,激活该环境,确保所有依赖项都正确安装。此外,建议在安装过程中指定CUDA版本,以确保与GPU兼容性。通过这些步骤,可以确保PyTorch和TensorFlow GPU版的顺利安装和运行。 ... [详细]
  • 在跨线程调用UI控件方法时,通常使用同步调用机制,如 `控件.Invoke(Delegate, 参数)`。这里需要声明并实现一个委托,因为控件本身并不知道如何处理跨线程操作。通过将具体的实现逻辑封装在委托中,控件可以正确地执行这些操作,确保线程安全性和UI的一致性。此外,为了提高性能和可维护性,建议对频繁的跨线程调用进行优化,例如使用异步调用或批量处理请求。 ... [详细]
  • 近日,我在处理一个复杂的前端问题时遇到了极大困扰。具体来说,我之前开发了一个功能丰富的纯jQuery代码的前端GridView控件,实现了多种功能和视觉效果,并在多个项目中表现良好。然而,最近在尝试应用 `border-box` 布局模式时,却遇到了意想不到的兼容性和性能问题。这提醒我们在条件尚未完全成熟的情况下,应谨慎使用 `border-box` 布局模式,以免引入不必要的复杂性和潜在的bug。 ... [详细]
  • 在Eclipse中提升开发效率,推荐使用Google V8插件以增强Node.js的调试体验。安装方法有两种:一是通过Eclipse Marketplace搜索并安装;二是通过“Help”菜单中的“Install New Software”,在名称栏输入“googleV8”。此插件能够显著改善调试过程中的性能和响应速度,提高开发者的生产力。 ... [详细]
author-avatar
志强旻茜青民
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有