第二讲 硬件I/O操作zz

本文介绍了嵌入式系统中硬件I/O操作的基本概念及其实现方法,详细讲解了使用ecos操作系统进行I/O寄存器读写的具体宏定义,并通过一个控制蜂鸣器的应用实例展示了如何利用这些宏进行实际的硬件控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

发信人: gdtyy (gdtyy), 信区: Embedded
标  题: 第二讲 硬件I/O操作
发信站: 水木社区 (Mon Jun 25 23:29:42 2007), 站内

**********************
* 第二讲 硬件I/O操作 *
**********************
    2006/12/27  asdjf@163.com  www.armecos.com

    对设备进行访问和控制时需要访问I/O寄存器。硬件抽象层提供了一些宏用于I/O寄存器
的读写操作。
    之所以不用指针直接操作,目的是为了可移植性。使用宏的原因是避免函数调用引起的
性能损失。ecos是一种可移植的嵌入式操作系统,它可以移植到16位、32位、64位的各种处
理器平台上。ecos由各种组件构成,根据具体硬件平台的需要可以分别将这些组件加入到系
统中来,从而实现各种所需的功能。ecos的这种层次结构的最底层是硬件抽象层(Hardware
Abstraction Layer),通常称为HAL。硬件抽象层HAL对处理器结构和系统硬件平台进行抽象
,当需要在一个新的目标平台上运行ecos时,只需对底层的硬件抽象层进行修改,便可迅速
地将整个ecos系统移植到新的平台上。
    常用I/O操作宏:

    读寄存器值  从寄存器读数据并将结果存放在存值变量里
    HAL_READ_UINT8(寄存器地址,存值变量);
    HAL_READ_UINT16(寄存器地址,存值变量);
    HAL_READ_UINT32(寄存器地址,存值变量);

    写寄存器  向寄存器写如数值
    HAL_WRITE_UINT8(寄存器地址,值);
    HAL_WRITE_UINT16(寄存器地址,值);
    HAL_WRITE_UINT32(寄存器地址,值);

    这些宏位于头文件cyg/hal/hal_io.h内,感兴趣的读者可以看看这些宏是怎么实现的。
    I/O操作宏的定义也是按照ecos的分层原则定义的,HAL表示这是硬件抽象层函数,
READ/WRITE表示具体操作,UINTx表示读写宽度,这些宏很容易记忆的,而且见名知意。
    寄存器名称定义在cyg/hal/plf_io.h中,我们仍然按照ecos命名规则起名,如下:

// GPIO
#define LPC2XXX_GPIO_IO0PIN       0xE0028000
#define LPC2XXX_GPIO_IO0SET       0xE0028004
#define LPC2XXX_GPIO_IO0DIR       0xE0028008
#define LPC2XXX_GPIO_IO0CLR       0xE002800C

    LPC2XXX表示芯片型号,GPIO表示I/O类型,IO-n-ops表示Pn口的操作方式(引脚、方向
、设置、清除)。这样的命名比枯燥的数字更容易记忆,不重名也不易错。
    下面是控制GPIO让蜂鸣器发声的应用程序,响1秒停1秒,周而复始。线程创建第一讲已
经说过,不再重复。

#include <cyg/kernel/kapi.h>
#include <cyg/hal/hal_io.h>
#include <cyg/hal/plf_io.h>

#define STACK_SIZE 4096
#define BEEPCON 0x0000080

char stack[2][STACK_SIZE];
static cyg_thread thread_data[2];
static cyg_handle_t thread_handle[2];

void taska(cyg_addrword_t data)
{
    int message = (int) data;

    HAL_WRITE_UINT32(LPC2XXX_GPIO_IO0DIR,BEEPCON);

    for(;;)
    {
        HAL_WRITE_UINT32(LPC2XXX_GPIO_IO0SET,BEEPCON);
        cyg_thread_delay(100);
        HAL_WRITE_UINT32(LPC2XXX_GPIO_IO0CLR,BEEPCON);
        cyg_thread_delay(100);
    }
}

void
test(cyg_addrword_t data)
{
    printf("/n/n/n");
    printf("/t    *******************************/n");
    printf("/t    *     Hello! The world.       */n");
    printf("/t    *******************************/n/n/n");

    // Create a main thread, so we can run the scheduler and have time 'pass'
    cyg_thread_create(10,                // Priority - just a number
                      taska,             // entry
                      1,                 // entry parameter
                      "taska",           // Name
                      &stack[1],         // Stack
                      STACK_SIZE,        // Size
                      &thread_handle[1], // Handle
                      &thread_data[1]    // Thread data structure
            );
    cyg_thread_resume(thread_handle[1]); // Start it
}

void
cyg_start(void)
{
    // Create a main thread, so we can run the scheduler and have time 'pass'
    cyg_thread_create(10,                // Priority - just a number
                      test,              // entry
                      0,                 // entry parameter
                      "test",            // Name
                      &stack[0],         // Stack
                      STACK_SIZE,        // Size
                      &thread_handle[0], // Handle
                      &thread_data[0]    // Thread data structure
            );
    cyg_thread_resume(thread_handle[0]); // Start it
    cyg_scheduler_start();
}

--

※ 来源:·水木社区 http://newsmth.net·[FROM: 61.149.56.*]
 

内容概要:文章详细介绍了ETL工程师这一职业,解释了ETL(Extract-Transform-Load)的概念及其在数据处理中的重要性。ETL工程师负责将分散、不统一的数据整合为有价值的信息,支持企业的决策分析。日常工作包括数据整合、存储管理、挖掘设计支持和多维分析展现。文中强调了ETL工程师所需的核心技能,如数据库知识、ETL工具使用、编程能力、业务理解能力和问题解决能力。此外,还盘点了常见的ETL工具,包括开源工具如Kettle、XXL-JOB、Oozie、Azkaban和海豚调度,以及企业级工具如TASKCTL和Moia Comtrol。最后,文章探讨了ETL工程师的职业发展路径,从初级到高级的技术晋升,以及向大数据工程师或数据产品经理的横向发展,并提供了学习资源和求职技巧。 适合人群:对数据处理感兴趣,尤其是希望从事数据工程领域的人士,如数据分析师、数据科学家、软件工程师等。 使用场景及目标:①了解ETL工程师的职责和技能要求;②选择适合自己的ETL工具;③规划ETL工程师的职业发展路径;④获取相关的学习资源和求职建议。 其他说明:随着大数据技术的发展和企业数字化转型的加速,ETL工程师的需求不断增加,尤其是在金融、零售、制造、人工智能、物联网和区块链等领域。数据隐私保护法规的完善也使得ETL工程师在数据安全和合规处理方面的作用更加重要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值