搜索
bottom↓
回复: 43
打印 上一主题 下一主题

[LIB][ICC][IAR][GCC] 经过严格测试的TWI从机发送和接收模块

[复制链接]

出0入296汤圆

跳转到指定楼层
1
发表于 2010-4-14 13:52:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Gorgon_Meducer 于 2014-3-5 15:08 编辑


[ 使用说明 ]

    这是一个经过严格测试的TWI从机发送/接受模块。带有自动总线错误恢复机制。
现在发布的版本屏蔽了对Sleep模式的支持。感兴趣的人可以跟贴。使用方法看twi.h
就知道了,twi.c里面的内容我贴出来给有兴趣读代码的人,但是从使用的角度来说
完全不用考虑里面的内容。
    这里就一些注意事项说一下:
    a. 除了idle模式下,其他sleep模式下,该模块无法正常工作,需要一个额外的
       插件。
    b. 如果注册了读取服务,无论发生什么情况,甚至是总线出错,系统都会保留
       这个任务,直到正确的读取到数据,非常省心。
    c. 如果注册了发送任务,如果数据没有被正确的发送,比如发送到一半,比如
       总线出错之类,系统会自动注销当前的任务,并调用report函数,用户可以
       在report函数被自动调用的时候,检测report函数的result来获取发送任务
       的结果——成功/失败/取消
    d. 在app_cfg.h中定义宏TWI_PINS_INIT来完成对TWI引脚的初始化——如果需要
       的话。
    e. 模块经过IAR 5.30 5.40最高等级优化测试。


[ 相关下载 ]

    如果你不幸下载到了老板本(twi_slave.c里面twi中断处理程序的尾部有一个测
    试用的do{}while(false)结构,请手动删除或者下载这里的新版本)


点击此处下载 ourdev_546390.rar(文件大小:650K) (原文件名:ES.rar)

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入296汤圆

2
 楼主| 发表于 2010-4-14 13:52:28 | 只看该作者

出0入296汤圆

3
 楼主| 发表于 2010-4-14 13:54:21 | 只看该作者
<font color=red>
twi.h
<font color=brown>


//! \brief import configurations
#include "app_cfg.h"


#define REQ_FAILED          0xE0
#define REQ_RCV_BUFFER_OVF  0xE1
#define REQ_BUS_ERROR       0xE2
#define REQ_CANCELLED       0xE3
#define REQ_UNKONW_ERROR    0xFF

#define REQ_SUCCESS         0x01
#define REQ_ON_GOING        0x00


typedef void TWI_WRITE_REQ_REPORT(uint8_t chResult);
typedef void TWI_READ_REQ_REPORT(uint8_t chResult, uint8_t *pchStream, uint8_t chLength);

            

/*! \note twi slave model initializing function
*!
*! \param  none
*!
*! \return none
*/
extern void twi_slave_init(void);

#define reset_twi()         twi_slave_init()



/*! \note request send stream to master
*!
*! \param pStream  a point of stream
*!
*! \param chLength byte count of stream
*!
*! \param fnHandler a callback function pointer
*!
*! \return a boolean value to indicate the resule of accessing
*/
extern bool request_send_stream(volatile void *pStream, uint8_t chLength, TWI_WRITE_REQ_REPORT *fnHandler);


/*! \note try to cancel current sending request
*!
*! \param none
*!
*! \return a boolean value to indicate the resule of accessing
*/
extern bool try_to_cancel_send_request(void);


/*! \note request receive data from master
*!
*! \param pStream  a point of stream
*!
*! \param chLength stream buffer size
*!
*! \param fnHandler a callback function pointer
*!
*! \return a boolean value to indicate the resule of accessing
*/
extern bool request_receive_stream(volatile void *pStream, uint8_t chLength, TWI_READ_REQ_REPORT *fnHandler);


/*! \note try to cancel current receive request
*!
*! \param none
*!
*! \return a boolean value to indicate the resule of accessing
*/
extern bool try_to_cancel_receive_request(void);


/*! \note release SCL
*!
*! \param  none
*!
*! \return none
*/
extern void release_twi(void);


//! \brief twi task locker
extern ES_LOCKER g_lkTWILocker;

出0入0汤圆

4
发表于 2010-4-14 13:54:22 | 只看该作者
火速占位,感谢傻孩子:)

出0入0汤圆

5
发表于 2010-4-14 14:00:41 | 只看该作者
地板

出0入0汤圆

6
发表于 2010-4-14 14:18:08 | 只看该作者
地下室~~~

出0入0汤圆

7
发表于 2010-4-14 14:18:23 | 只看该作者
支持傻孩子

出0入0汤圆

8
发表于 2010-4-14 14:26:52 | 只看该作者
支持,正在做这方面的项目,谢谢

出0入264汤圆

9
发表于 2010-4-14 15:00:13 | 只看该作者
傻孩子的帖子,死了都要顶。

出0入0汤圆

10
发表于 2010-4-14 15:20:21 | 只看该作者
帮顶下

出0入0汤圆

11
发表于 2010-4-14 15:30:25 | 只看该作者

出0入0汤圆

12
发表于 2010-4-14 15:47:44 | 只看该作者
顶,没什么好说的,顶就是了^^^^

出0入0汤圆

13
发表于 2010-4-14 15:55:54 | 只看该作者
不错,基于中断方式的,还支持GCC

出10入10汤圆

14
发表于 2010-4-14 16:39:57 | 只看该作者
正准备做类似的东西.谢谢共享!

出0入0汤圆

15
发表于 2010-4-14 17:09:12 | 只看该作者
为什么高手的程序里总是用了很多的结构体和指针,而我们自己的程序中更多的是if和switch,为什么呢

出0入296汤圆

16
 楼主| 发表于 2010-4-14 17:44:31 | 只看该作者
用指针和结构体的原因不是因为我是高手,而是对AVR来说,能产生高效率的代码。

出0入0汤圆

17
发表于 2010-4-14 18:03:38 | 只看该作者

出0入0汤圆

18
发表于 2010-4-14 18:09:12 | 只看该作者
mark 以后用

出0入0汤圆

19
发表于 2010-4-14 18:44:22 | 只看该作者

出0入0汤圆

20
发表于 2010-4-14 18:59:25 | 只看该作者
占位,学习!

出0入0汤圆

21
发表于 2010-4-14 19:05:42 | 只看该作者
MARK

出0入0汤圆

22
发表于 2010-4-14 19:49:34 | 只看该作者
好帖标记

出0入0汤圆

23
发表于 2010-4-14 19:58:39 | 只看该作者
回复【楼主位】Gorgon Meducer 傻孩子
-----------------------------------------------------------------------

dddd

出0入0汤圆

24
发表于 2010-4-14 20:00:03 | 只看该作者
以后有用

出0入0汤圆

25
发表于 2010-7-22 18:08:27 | 只看该作者
mark

出0入0汤圆

26
发表于 2010-8-13 15:27:00 | 只看该作者
hao!!!!!!!!!

出0入0汤圆

27
发表于 2010-8-13 15:40:22 | 只看该作者
才看到,傻孩子的贴要顶!

出0入0汤圆

28
发表于 2010-8-18 08:15:15 | 只看该作者
MARK

出0入50汤圆

29
发表于 2010-10-14 12:16:47 | 只看该作者
dd更健康

出0入0汤圆

30
发表于 2011-3-12 11:34:03 | 只看该作者
mark

出0入134汤圆

31
发表于 2011-3-12 11:41:28 | 只看该作者
不怎么懂~~

出0入0汤圆

32
发表于 2011-3-12 12:01:05 | 只看该作者
收藏

出0入0汤圆

33
发表于 2011-3-12 14:42:55 | 只看该作者

出0入0汤圆

34
发表于 2011-4-27 01:08:57 | 只看该作者
请问傻孩子 ES_LOCKER 这个结构体在哪里定义的?

出0入296汤圆

35
 楼主| 发表于 2011-4-27 09:30:47 | 只看该作者
压缩包里面的signal.h里面?或者是compiler.h里面?

出0入0汤圆

36
发表于 2011-5-18 00:42:06 | 只看该作者
一定要顶

出0入0汤圆

37
发表于 2011-5-18 20:11:21 | 只看该作者
mark

出0入0汤圆

38
发表于 2011-6-10 09:28:45 | 只看该作者
mark

出0入0汤圆

39
发表于 2011-8-20 00:05:02 | 只看该作者
MARK !!!!!!!!!

出0入0汤圆

40
发表于 2011-8-24 11:38:00 | 只看该作者
mark 正学习

出50入0汤圆

41
发表于 2011-8-24 11:59:26 | 只看该作者
mark

出0入0汤圆

42
发表于 2011-10-6 22:02:02 | 只看该作者
顶  傻孩子
mark

出0入0汤圆

43
发表于 2014-3-5 13:56:40 | 只看该作者
学习中。。。

出0入0汤圆

44
发表于 2014-4-9 14:51:16 | 只看该作者
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 05:22

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表