最小的mini2440初始化代码(二)

从单片机开发到嵌入式开发,有很多相通的地方,也有一些区别。就说这BootLoader吧,做单片机的时候没这个概念,单片机里的BootLoader主要是用于代码升级,而嵌入式的主要是用来做初始化工作的。

 

首先得了解启动的流程,再谈初始化的事情。mini2440开发板用的是S3C2440芯片,该芯片支持NOR和NAND启动模式,所以开发板有一个开关用于切换这两种启动模式。NOR启动和NADN启动有一些不同的地方,因为NOR具有字节访问能力,可以直接映射到地址0x0000_0000,在Reset后就会执行NOR上的代码。NAND只有页访问能力,无法映射到地址空间,所以当选择NAND启动是,S3C2440会把NAND最前的4K数据读到片内SRAM,再执行指令,片内SRAM映射的地址空间是0x0000_0000。

 

如果不执行BootLoader又如何?做单片机的时候,一般不需要扩展代码存储器,Flash和RAM都是在片内的,芯片已经配置好了。我用的是ADS1.2+JLink7,可以直接把代码加载到RAM并跳到代码入口点执行。如果不执行BootLoader,也就是说开发板没有初始化,此时的RAM不一定是可用的。加载后发现,RAM中的数据是乱七八糟。

 

写这段初始化代码的目的也是解决这个问题,在读了开发板所带的源码,从中裁剪了一小部分,主要是配置存储器。
还要记得关闭看门狗,因为S3C2440的看门狗默认是打开的,且调试模式下会自动关闭,如果忘了关闭,在运行时忘了喂的话就会不时地被咬上一口。
还要记得关闭中断,因为这段代码不知道怎么处理中断,所以就统统关闭,你可以在接下来的代码中自行处理。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Qt上实现mini2440的IIC,你需要进行以下步骤: 1. 安装Qt的开发环境和交叉编译工具链,以便能够将程序编译成可在mini2440上运行的二进制文件。 2. 在Qt中创建一个新的项目,并将其配置为使用交叉编译工具链。 3. 编写代码初始化mini2440的IIC控制器,并设置从机地址、传输速率等参数。 4. 在代码中使用Qt的串口通信库来进行IIC数据传输,并将读取到的数据显示在Qt的界面上。 下面是一个简单的示例程序,演示如何在Qt中实现mini2440的IIC: ```cpp #include <QCoreApplication> #include <QSerialPort> #include <QDebug> #define IIC_BUS "/dev/i2c-0" #define IIC_ADDRESS 0x50 int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // 初始化串口 QSerialPort serialPort; serialPort.setPortName(IIC_BUS); serialPort.setBaudRate(QSerialPort::Baud115200); serialPort.setDataBits(QSerialPort::Data8); serialPort.setParity(QSerialPort::NoParity); serialPort.setStopBits(QSerialPort::OneStop); serialPort.setFlowControl(QSerialPort::NoFlowControl); // 打开串口 if (!serialPort.open(QIODevice::ReadWrite)) { qDebug() << "Failed to open serial port"; return 1; } // 初始化IIC控制器 char initCmd[] = {0x00, 0x01, 0x02, 0x03}; if (serialPort.write(initCmd, sizeof(initCmd)) < 0) { qDebug() << "Failed to initialize IIC controller"; return 1; } // 设置从机地址 char setAddrCmd[] = {0x10, IIC_ADDRESS}; if (serialPort.write(setAddrCmd, sizeof(setAddrCmd)) < 0) { qDebug() << "Failed to set IIC address"; return 1; } // 读取数据 char readCmd[] = {0x20, 0x00, 0x00}; if (serialPort.write(readCmd, sizeof(readCmd)) < 0) { qDebug() << "Failed to send read command"; return 1; } char buffer[256]; if (serialPort.read(buffer, sizeof(buffer)) < 0) { qDebug() << "Failed to read data"; return 1; } // 显示读取到的数据 qDebug() << "Read data:" << buffer; // 关闭串口 serialPort.close(); return a.exec(); } ``` 注意,这只是一个简单的示例程序,并且假设你已经正确地配置了Qt的交叉编译环境和mini2440的硬件环境。在实际使用中,你需要根据实际情况进行更多的调试和修改。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值