登录
注册
一键加入QQ群
友善之臂官方网站
首 页
联系我们
淘宝店铺
维基教程
资料下载
搜索帖子!
NanoPC-T2
Core4418
NanoPC-T3 Plus
Core6818
NanoPi-M4B
NanoPC-T4
NanoPC-T6
NanoPi-NEO
NanoPi-NEO Core
NanoPi-NEO Air
NanoPi-M1 Plus
NanoPi-Duo2
NanoPi-NEO3
核心板:
Smart210
Tiny210
Smart4418
Smart6818
SOM-RK3399V2
CM3588(新品)
路由器:
R1
R1S
R2S
R2S Plus
R2C Plus
R4S
R5S
R5C
R6C
R6S
热门版块:
站点服务
Linux技术交流区
站务管理与公告
裸机程序和微型OS
友善之臂官方客服中心
相关资料下载及使用技巧
默认风格
用户中心首页
编辑个人资料
查看个人资料
好友列表
用户权限查看
积分管理
积分转换
特殊组购买
收藏夹
我的主题
基本统计信息
到访IP统计
管理团队
管理统计
在线统计
会员排行
版块排行
帖子排行
个人首页
我的收藏
好友近况
友善之家
裸机程序和微型OS
艰难地实现了6410的裸机IIC程序(望大家改进)
友友粉丝快线
开发板销售中心
嵌入式最新资讯
友善之臂最新动态
友善之臂官方客服中心
开发板实战手册及教程
应用方案和定制开发
NanoPi 交流与讨论
NanoPi 玩家交流区
ROM发布区
硬软DIY及开发
嵌入式交流与讨论
Android技术交流区
Linux技术交流区
U-boot技术交流区
WinCE技术交流区
Ubuntu技术交流区
裸机程序和微型OS
OpenWRT讨论区
开发板硬件讨论区
相关资料下载及使用技巧
站点服务
二手交易区
我的论坛我的贴
站务管理与公告
上一主题
下一主题
«
1
2
»
Pages: 1/2 Go
新 帖
主题 : 艰难地实现了6410的裸机IIC程序(望大家改进)
复制链接
|
浏览器收藏
|
打印
venkee.com
级别: 侠客
作者资料
发送短消息
加为好友
UID:
39247
精华:
2
发帖:
51
金钱:
355 两
威望:
71 点
贡献值:
2 点
综合积分:
142 分
注册时间:
2011-03-07
最后登录:
2015-05-31
楼主
发表于: 2011-05-24 19:37
只看楼主
|
小
中
大
艰难地实现了6410的裸机IIC程序(望大家改进)
复制代码
#include "s3c6410_addr.h"
#include "interrupt.h"
#include "defs.h"
#include "utils.h"
#define RESET 0xaf
#define MASTER_TX_START 0xf0
#define MASTER_TX_STOP 0xd0
#define MASTER_RX_START 0xB0
#define MASTER_RX_STOP 0x90
#define READ 0
#define WRITE 1
#define DUMMY 4
static volatile U8 data[2];
static volatile U8 data_ptr;
static volatile U8 done;
static volatile U8 mode;
void __irq interrupt(void)
{
switch(mode){
case DUMMY:
rIICDS0 = data[data_ptr++];
rIICCON0 = RESET;
done = 1;
break;
case READ:
if(data_ptr == 0){
data[data_ptr++] = rIICDS0;
rIICCON0 = 0x2f;
break;
}else{
data[data_ptr++] = rIICDS0;
rIICSTAT0 = MASTER_RX_STOP;
rIICCON0 = RESET;
Delay(1);//这里两个延时很重要
done = 1;
break;
}
case WRITE:
//Uart_Printf("in interrupt: write\n");
if(data_ptr == 1){
rIICSTAT0 = MASTER_TX_STOP;
rIICCON0 = RESET;
Delay(1);//这里两个延时很重要
done = 1;
break;
}else{
rIICDS0 = data[data_ptr++];
rIICCON0 = RESET;
break;
}
default:
break;
}
INTC_ClearVectAddr();
}
void read(U8 slvaddr, U8 addr, U8 *data_out)
{
mode = DUMMY;
data[0] = addr;
data_ptr = 0;
rIICDS0 = slvaddr;
rIICSTAT0 = MASTER_TX_START;
rIICCON0 = RESET;
while(!done);
mode = READ;
data_ptr = 0;
rIICDS0 = slvaddr;
rIICSTAT0 = MASTER_RX_START;
rIICCON0 = RESET;
while(!done);
*data_out = data[0];
}
void write(U8 slvaddr, U8 addr, U8 *data_in)
{
//Uart_Printf("in write\n");
mode = WRITE;
data[0] = addr;
data[1] = *data_in;
data_ptr = 0;
done = 0;
rIICDS0 = slvaddr;
rIICSTAT0 = MASTER_TX_START;
rIICCON0 = RESET;
while(!done);//Uart_Printf("in write loop\n");
//Delay(1);
}
void init(void)
{
rGPEPUD &= ~(0xf << 10);
rGPBCON = rGPBCON & ~(0xfF << 20) | (0x22 << 20);
INTC_Init();
INTC_SetIntISR(INT_I2C0, interrupt);
INTC_Enable(INT_I2C0);
Delay(0);
}
void iic(void)
{
U16 i;
U8 tmp[256];
init();
Uart_Printf("iic testing\n");
for(i = 0; i < 256; i++){
tmp[i] = (U8)i;
write(0xa0, (U8)i, &tmp[i]);
tmp[i] = 0;
}
Uart_Printf("datas have been written to rom\n\n");
Uart_Printf("now read them rom\n");
for(i = 0; i < 256; i++){
read(0xa0, (U8)i, &tmp[i]);
Uart_Printf("%3x", tmp[i]);
if((i + 1) % 16 == 0)
Uart_Printf("\n");
}
}
void xmain(void)
{
Uart_Init();
iic();
while(1);
}
[ 此帖被venkee.com在2011-06-17 20:17重新编辑 ]
顶端
回复
引用
分享
venkee.com
级别: 侠客
作者资料
发送短消息
加为好友
UID:
39247
精华:
2
发帖:
51
金钱:
355 两
威望:
71 点
贡献值:
2 点
综合积分:
142 分
注册时间:
2011-03-07
最后登录:
2015-05-31
1楼
发表于: 2011-05-30 21:37
只看该作者
|
小
中
大
没人给意见,自己顶!
顶端
回复
引用
分享
yjdhqcc8969
级别: 侠客
作者资料
发送短消息
加为好友
QQ联系
UID:
34184
精华:
0
发帖:
58
金钱:
290 两
威望:
58 点
贡献值:
0 点
综合积分:
116 分
注册时间:
2010-12-12
最后登录:
2013-07-12
2楼
发表于: 2011-05-31 19:10
只看该作者
|
小
中
大
顶顶。。。。
学习学习学习。。努力学习
顶端
回复
引用
分享
carlin
菜鸟在路上
级别: 圣骑士
作者资料
发送短消息
加为好友
UID:
42749
精华:
6
发帖:
241
金钱:
1530 两
威望:
306 点
贡献值:
6 点
综合积分:
602 分
注册时间:
2011-04-11
最后登录:
2016-07-19
3楼
发表于: 2011-06-01 23:50
只看该作者
|
小
中
大
顶以后学习
顶端
回复
引用
分享
embededme
级别: 新手上路
作者资料
发送短消息
加为好友
UID:
48486
精华:
0
发帖:
8
金钱:
40 两
威望:
8 点
贡献值:
0 点
综合积分:
16 分
注册时间:
2011-06-01
最后登录:
2017-09-13
4楼
发表于: 2011-06-02 09:41
只看该作者
|
小
中
大
想问一下楼主 关于这个irq中断 你的跳转实现了?
INTC_SetIntISR
INTC_Enable
之后就可以中断产生啦??
顶端
回复
引用
分享
embededme
级别: 新手上路
作者资料
发送短消息
加为好友
UID:
48486
精华:
0
发帖:
8
金钱:
40 两
威望:
8 点
贡献值:
0 点
综合积分:
16 分
注册时间:
2011-06-01
最后登录:
2017-09-13
5楼
发表于: 2011-06-02 09:58
只看该作者
|
小
中
大
我之前做的程序 想用中断EINT0
在启动代码里加了开启VIC port的三句代码
然后再main函数里面也调用了INTC_Init INTC_SetIntISR INTC_Enable三个函数来开启一个中断 然后中断产生了 可是就是没有跳转到isr上面 不知道楼主这个地方是不是成功了。
顶端
回复
引用
分享
melodyooo
级别: 新手上路
作者资料
发送短消息
加为好友
UID:
44362
精华:
0
发帖:
31
金钱:
160 两
威望:
32 点
贡献值:
0 点
综合积分:
62 分
注册时间:
2011-04-24
最后登录:
2012-10-09
6楼
发表于: 2011-06-02 11:51
只看该作者
|
小
中
大
回 4楼(embededme) 的帖子
INTC_SetIntISR(INT_I2C0, interrupt);
这个函数的参数你好好看下 就知道它是怎么给地址了
顶端
回复
引用
分享
venkee.com
级别: 侠客
作者资料
发送短消息
加为好友
UID:
39247
精华:
2
发帖:
51
金钱:
355 两
威望:
71 点
贡献值:
2 点
综合积分:
142 分
注册时间:
2011-03-07
最后登录:
2015-05-31
7楼
发表于: 2011-06-02 12:38
只看该作者
|
小
中
大
回 5楼(embededme) 的帖子
很负责的告诉你,不实现的代码,我不敢放上论坛,是ads的设置问题,--first这个选项应该是startup.o(Init),这是我的设置,我曾经把一段用for循环实现的delay代码放到main函数前,而first参数没设置好,然后一开始总是就执行delay的代码了!具体你的问题出现在哪里?因为开发环境不同,所以设置问题带来的运行差异我是无法解决的,但我很负责的说,代码很多人都验证过是可以的!如果你老是不行,就先拿我的bin文件试下,这是说明我代码没问题的最好方法!
顶端
回复
引用
分享
浓浓黄河水
级别: 新手上路
作者资料
发送短消息
加为好友
QQ联系
UID:
39452
精华:
0
发帖:
24
金钱:
120 两
威望:
24 点
贡献值:
0 点
综合积分:
48 分
注册时间:
2011-03-09
最后登录:
2012-07-06
8楼
发表于: 2011-07-08 16:45
只看该作者
|
小
中
大
顶啊,那么好的东西
顶端
回复
引用
分享
xiufu004
级别: 新手上路
作者资料
发送短消息
加为好友
UID:
54471
精华:
0
发帖:
8
金钱:
40 两
威望:
8 点
贡献值:
0 点
综合积分:
16 分
注册时间:
2011-08-31
最后登录:
2012-03-15
9楼
发表于: 2011-09-09 10:18
只看该作者
|
小
中
大
请问有没有tiny6410mmu之类的裸机程序,分享分享?
顶端
回复
引用
分享
上一主题
下一主题
«
1
2
»
Pages: 1/2 Go
友善之家
裸机程序和微型OS
http://www.aiothome.net
访问内容超出本站范围,不能确定是否安全
继续访问
取消访问