S3C2440上RTC时钟驱动

发布时间:2024-06-11  

一、相关概念

1.平台设备:

通常在Linux中,把SOC系统中集成的独立外设单元(如:I2C、IIS、RTC、看门狗等)都被当作平台设备来处理。在Linux中用platform_device结构体来描述一个平台设备,在2.6.32内核中定义在:include/linux/platform_device.h中,如下:


struct platform_device {

const char *name;   //设备名称

int id;   //设备编号,配合设备名称使用

struct device dev;

u32 num_resources;   //设备使用各类资源的数量

struct resource *resource;   //设备使用的资源

};


现在你不必深入理解这个结构体,只要知道在Linux中是用这个结构体来定义一些平台设备的。比如在:arch/arm/plat-s3c24xx/devs.c中就定义了很多平台设备,下面我就只贴出RTC这一种的:


/* RTC */

static struct resource s3c_rtc_resource[] = {//定义了RTC平台设备使用的资源,这些资源在驱动中都会用到

[0] = { //IO端口资源范围

.start = S3C24XX_PA_RTC,

.end = S3C24XX_PA_RTC + 0xff,

.flags = IORESOURCE_MEM,

},

[1] = { //RTC报警中断资源

.start = IRQ_RTC,

.end = IRQ_RTC,

.flags = IORESOURCE_IRQ,

},

[2] = { //TICK节拍时间中断资源

.start = IRQ_TICK,

.end = IRQ_TICK,

.flags = IORESOURCE_IRQ

}

};

 

struct platform_device s3c_device_rtc = { //定义了RTC平台设备

.name = "s3c2410-rtc", //设备名称

.id = -1,

.num_resources = ARRAY_SIZE(s3c_rtc_resource), //资源数量

.resource = s3c_rtc_resource, //引用上面定义的资源

};

 

EXPORT_SYMBOL(s3c_device_rtc);


好了,定义了平台设备,那系统是怎么来使用他的呢?我们打开:arch/arm/mach-s3c2440/mach-mini2440.c这个ARM 2440平台的系统入口文件,可以看到在系统初始化函数mini2440_machine_init中是使用platform_add_devices这个函数将一些平台设备添加到系统中的,如下:(至于系统是如何实现添加平台设备的,这里我们不必研究,这些Linux系统都已经做好了的,我们要研究的是后面平台设备的驱动是如何实现的)


static struct platform_device *mini2440_devices[] __initdata = {

&s3c_device_usb,

&s3c_device_lcd,

&s3c_device_wdt,

&s3c_device_i2c0,

&s3c_device_iis,

&s3c_device_rtc,//这里我们添加上RTC平台设备,默认是没添加的

}; //平台设备列表,也就是说我们要使用一个新的平台设备要先在上面定义,然后加到这个列表中,最后到驱动层去实现该设备的驱动

 

static void __init mini2440_machine_init(void)

{

#if defined (LCD_WIDTH)

s3c24xx_fb_set_platdata(&mini2440_fb_info);

#endif

s3c_i2c0_set_platdata(NULL);

//将上面列表中的平台设备添加到系统总线中

platform_add_devices(mini2440_devices, ARRAY_SIZE(mini2440_devices));

friendly_arm_machine_init();

}


2.平台设备驱动:

这里所讲的平台设备驱动是指具体的某种平台设备的驱动,比如上面讲的RTC平台设备,这里就是指RTC平台设备驱动。在Linux中,系统还为平台设备定义了平台驱动结构体platform_driver,就好比系统为字符设备定义了file_operations一样,但不要把平台设备跟字符设备、块设备、网络设备搞成了并列的概念,因平台设备也可以是字符设备等其他设备。注意:在被定义为平台设备的字符设备的驱动中,除了要实现字符设备驱动中file_operations的open、release、read、write等接口函数外,还要实现平台设备驱动中platform_driver的probe、remove、suspend、resume等接口函数。好了,在我们搞明白上面这些后,下面我们就来具体详细分析讲解RTC平台设备的驱动现实。


二、RTC平台设备的驱动讲解

1.RTC在Linux中的整体结构:

在Linux中要使一个驱动在不同的平台中都能够使用似乎是不可能的,所以我们先看2.6.32内核驱动中的RTC部分是单独的一个文件夹,在文件夹中包含了很多不同体系结构的RTC驱动,当然也有S3C2440的RTC驱动,然而在这些驱动中他们都使用了一组文件里面的方法,那么这组文件就是RTC的核心(注意这里的核心不是指对RTC硬件的操作,指的是对RTC操作的方法。对硬件寄存器的操作还是在具体的驱动中)。好了,我们还是用图来说明这种关系吧!!

2、RTC硬件原理图分析:以下是S3C2440AL内部集成的RTC模块结构图和一个外部的晶振接口图

我们从S3C2440内部RTC模块结构图和数据手册得知,RTC在Linux中主要实现两种功能,分别是系统掉电后的时间日期维持和时间日期报警(类似定时器功能)。

①、时间日期维持功能:

主要是由RTC实时时钟控制寄存器RTCCON进行功能的使能控制,由节拍时间计数寄存器TICNT来产生节拍时间中断来实现实时操作系统功能相关的时间和实时同步。其中对时间日期的操作实际上是对BCD码操作,而BCD码则是由一系列的寄存器组成(BCD秒寄存器BCDSEC、BCD分寄存器BCDMIN、BCD小时寄存器BCDHOUR、BCD日期寄存器BCDDATE、BCD日寄存器BCDDAY、BCD月寄存器BCDMON、BCD年寄存器BCDYEAR)。

②、报警功能:

主要由RTC报警控制寄存器RTCALM进行功能使能控制,并产生报警中断。报警时间日期的设置也是对一系列的寄存器进行操作(报警秒数据寄存器ALMSEC、报警分钟数据寄存器ALMMIN、报警小时数据寄存器ALMHOUR、报警日期数据寄存器ALMDATE、报警月数据寄存器ALMMON、报警年数据寄存器ALMYEAR)。

3.RTC驱动实现步骤(建立驱动文件mini2440_rtc.c):

注意:在每步中,为了让代码逻辑更加有条理和容易理解,就没有考虑代码的顺序,比如函数要先定义后调用。如果要编译此代码,请严格按照C语言的规范来调整代码的顺序。

①、依然是驱动程序的最基本结构:RTC驱动的初始化和退出部分及其他,如下:


#include

#include

#include

#include

 

/*RTC平台驱动结构体,平台驱动结构体定义在platform_device.h中,该结构体内的接口函数在第②、④步中实现*/

static struct platform_driver s3c2410_rtc_driver = {

.probe = s3c_rtc_probe, /*RTC探测函数,在第②步中实现*/

.remove = __devexit_p(s3c_rtc_remove), /*RTC移除函数,在第④步实现,为何使用__devexit_p,在该函数实现的地方再讲*/

.suspend = s3c_rtc_suspend, /*RTC挂起函数,在第④步中实现*/

.resume = s3c_rtc_resume, /*RTC恢复函数,在第④步中实现*/

.driver = {

/*注意这里的名称一定要和系统中定义平台设备的地方一致,这样才能把平台设备与该平台设备的驱动关联起来*/

.name = "s3c2410-rtc",

.owner = THIS_MODULE,

},

};

 

static int __init s3c_rtc_init(void)

{

    /*将RTC注册成平台设备驱动*/

return platform_driver_register(&s3c2410_rtc_driver);

}

 

static void __exit s3c_rtc_exit(void)

{

    /*注销RTC平台设备驱动*/

platform_driver_unregister(&s3c2410_rtc_driver);

}

 

module_init(s3c_rtc_init);

module_exit(s3c_rtc_exit);

 

MODULE_DESCRIPTION("Samsung S3C RTC Driver");

MODULE_AUTHOR("Ben Dooks ");

MODULE_LICENSE("GPL");

MODULE_ALIAS("platform:s3c2410-rtc");


②、RTC平台驱动结构中探测函数rtc_probe的实现。探测就意味着在系统总线中去检测设备的存在,然后获取设备有用的相关资源信息,以便我们使用这些信息。代码如下:


#include 

#include 

#include 

#include 

 

/*定义了一个用来保存RTC的IO端口占用的IO空间和经过虚拟映射后的内存地址*/

static struct resource *s3c_rtc_mem;

static void __iomem *s3c_rtc_base;

 

/*定义了两个变量来保存RTC报警中断号和TICK节拍时间中断号,NO_IRQ宏定义在irq.h中*/

static int s3c_rtc_alarmno = NO_IRQ;

static int s3c_rtc_tickno = NO_IRQ;

 

/*申明并初始化一个自旋锁rtc_pie_lock,对RTC资源进行互斥访问*/
static DEFINE_SPINLOCK(s3c_rtc_pie_lock);

 

/*RTC平台驱动探测函数,注意这里为什么要使用一个__devinit,也到rtc_remove实现的地方一起讲*/

static int __devinit s3c_rtc_probe(struct platform_device *pdev)

{

int ret;

struct rtc_device *rtc; /*定义一个RTC设备类,rtc_device定义在rtc.h中*/

struct resource *res; /*定义一个资源,用来保存获取的RTC的资源*/

 

/*在系统定义的RTC平台设备中获取RTC报警中断号,platform_get_irq定义在platform_device.h中*/

s3c_rtc_alarmno = platform_get_irq(pdev, 0);

if (rtc_alarmno < 0)

{

/*获取RTC报警中断号不成功错误处理,dev_err定义在device.h中,在platform_device.h中已经引用,所以这里就不需再引用了*/

dev_err(&pdev->dev, "no irq for alarmn");

return -ENOENT;
}

 

//在系统定义的RTC平台设备中获取TICK节拍时间中断号
s3c_rtc_tickno = platform_get_irq(pdev, 1);

if (rtc_tickno < 0)

{

/*获取TICK节拍时间中断号不成功错误处理*/

dev_err(&pdev->dev, "no irq for rtc tickn");

return -ENOENT;

}

 

/*获取RTC平台设备所使用的IO端口资源,注意这个IORESOURCE_MEM标志和RTC平台设备定义中的一致*/

res = platform_get_resource(pdev, IORESOURCE_MEM, 0);

if (res == NULL)

{

/*错误处理*/

dev_err(&pdev->dev, "failed to get memory region resourcen");

return -ENOENT;

}

 

/*申请RTC的IO内存资源所占用的内存地址空间(要注意理解IO空间和内存空间的区别),request_mem_region定义在ioport.h中*/

s3c_rtc_mem = request_mem_region(res->start, res->end - res->start + 1, pdev->name);

if (rtc_mem == NULL)

{

/*错误处理*/

dev_err(&pdev->dev, "failed to reserve memory regionn");

ret = -ENOENT;

goto err_nores;

}

 

/*将RTC的IO内存占用的这段内存地址空间映射到内存的虚拟地址,ioremap定义在io.h中。注意:IO内存要映射后才能使用,以后对虚拟地址的操作就是对内存地址空间的操作,*/

s3c_rtc_base = ioremap(res->start, res->end - res->start + 1);

if (rtc_base == NULL)

{

/*错误处理*/

dev_err(&pdev->dev, "failed ioremap()n");

ret = -EINVAL;

goto err_nomap;

}

 

/*好了,通过上面的步骤已经将RTC的资源都准备好了,下面就开始使用啦*/

 

/*这两个函数开始对RTC寄存器操作,定义都在下面*/

s3c_ rtc_enable(pdev, 1); /*对RTC的实时时钟控制寄存器RTCCON进行操作(功能是初始化或者使能RTC)*/

s3c_ rtc_setfreq(&pdev->dev, 1);/*对RTC的节拍时间��数寄存器TICNT的0-6位进行操作,即:节拍时间计数值的设定*/

 

/*device_init_wakeup该函数定义在pm_wakeup.h中,定义如下:

static inline void device_init_wakeup(struct device *dev, int val){

dev->power.can_wakeup = dev->power.should_wakeup = !!val;

}

显然这个函数是让驱动支持电源管理的,这里只要知道,can_wakeup为1时表明这个设备可以被唤醒,设备驱动为了支持Linux中的电源管理,有责任调用device_init_wakeup()来初始化can_wakeup,而should_wakeup则是在设备的电源状态发生变化的时候被device_may_wakeup()用来测试,测试它该不该变化,因此can_wakeup表明的是一种能力,而should_wakeup表明的是有了这种能力以后去不去做某件事。好了,我们没有必要深入研究电源管理的内容了,要不就扯远了,电源管理以后再讲*/

device_init_wakeup(&pdev->dev, 1);

 

/*将RTC注册为RTC设备类,RTC设备类在RTC驱动核心部分中由系统定义好的,注意rtcops这个参数是一个结构体,该结构体的作用和里面的接口函数实现在第③步中。rtc_device_register函数在rtc.h中定义,在drivers/rtc/class.c中实现*/

rtc = rtc_device_register("s3c", &pdev->dev, &s3c_rtcops, THIS_MODULE);
if (IS_ERR(rtc))

{

/*错误处理*/

dev_err(&pdev->dev, "cannot attach rtcn");

ret = PTR_ERR(rtc);

goto err_nortc;

}

 

/*设置RTC节拍时间计数寄存器TICNT的节拍时间计数值的用户最大相对值,这里你可能不理解这句,没关系,等你看到rtc_setfreq函数实现后自然就明白了*/

rtc->max_user_freq = 128;

 

/*将RTC设备类的数据传递给系统平台设备。

platform_set_drvdata是定义在platform_device.h的宏,如下:

#define  platform_set_drvdata(_dev,data)  dev_set_drvdata(&(_dev)->dev, (data))

而dev_set_drvdata又被定义在include/linux/device.h中,如下:

static inline void dev_set_drvdata (struct device *dev, void *data){

dev->driver_data = data;

}*/

platform_set_drvdata(pdev, rtc);

 

return 0;

 

//以下是上面错误处理的跳转点
err_nortc:

rtc_enable(pdev, 0);

iounmap(rtc_base);

 

err_nomap:

release_resource(rtc_mem);

 

err_nores:

return ret;

}

 

/*该函数主要是初始化或者使能RTC,以下RTC的各种寄存器的宏定义在arch/arm/plat-s3c/include/plat/regs-rtc.h中,各寄存器的用途和设置请参考S3C2440数据手册的第十七章实时时钟部分*/

static void s3c_rtc_enable(struct platform_device *pdev, int en)

{

void __iomem *base = s3c_rtc_base;

unsigned int tmp;

 

if (s3c_rtc_base == NULL)

return;

/*RTC的实时时钟控制寄存器RTCCON共有4个位,各位的初始值均为0,根据数据手册介绍第0位(即:RCTEN位)可以控制CPU和RTC之间的所有接口(即RTC使能功能),所以在系统复位后应该将RTCCON寄存器的第0为置为1;在关闭电源前,又应该将该位清零,以避免无意的写RTC寄存器*/

if (!en)

{

/*当en=0时(即属于关闭电源前的情况),RTCCON寄存器清零第一位*/

tmp = readb(rtc_base + S3C2410_RTCCON); /*读取RTCCON寄存器的值*/

/* tmp & ~S3C2410_RTCCON_RTCEN = 0 即屏蔽RTC使能*/

writeb(tmp & ~S3C2410_RTCCON_RTCEN, rtc_base + S3C2410_RTCCON);

 

tmp = readb(rtc_base + S3C2410_TICNT); /*读取TICNT寄存器的值*/

/* tmp & ~S3C2410_TICNT_ENABLE后第7位为0,即屏蔽节拍时间中断使能*/

writeb(tmp & ~S3C2410_TICNT_ENABLE, rtc_base + S3C2410_TICNT);

}

else

{

/*当en!=0时(即属于系统复位后的情况),使能RTC*/

if ((readb(rtc_base + S3C2410_RTCCON) & S3C2410_RTCCON_RTCEN) == 0)

{

dev_info(&pdev->dev, "rtc disabled, re-enablingn");

[1] [2] [3]
关键字:S3C2440  RTC  时钟驱动 引用地址:S3C2440上RTC时钟驱动 声明:本文内容及配图由平台用户或入驻媒体撰写。文章观点仅代表作者本人,不代表EEWorld网站立场。文章及其配图仅供工程师学习之用,如有内容侵权或违规,请联系本站处理,邮箱地址:bbs_service@eeworld.com.cn

上一篇:S3C2440的地址空间
下一篇:S3C2440中断控制系统

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利
加好友,回复“进群” 拉你进技术交流群
加好友,回复“进群”
拉你进技术交流群
0

推荐阅读最新更新时间:2024-06-21 10:16

S3C2440的Keil启动文件S3C2440.s添加中断配置
前言 本文主要描述如何在Keil自带的S3C2440.s文件中添加中断配置及中断地址映射,从而可以在中断产生时跳转到用户代码中的中断服务函数。目前在TQ2440开发板是实测可用。 工程源代码下载 本文所有代码都是截取代码,“…”代表其还有上下文。可根据代码中上下文的残缺部分找到该代码添加的位置。 一,添加中断相关寄存器地址符号映射 因为原始S3C2440.s文件中不含中断相关寄存器的地址,所以需要在开头添加: ... ; * RAM_INTVEC: when set the startup code copies exception vectors ; * from execution address to
[单片机]
S3C2440学习笔记一 1.1ADS软件的安装
1 打开ads软件安装包 点击setup.exe文件 2点击next 直到遇到选择安装位置可以改变 3 点击next 直到安装license文件 这里选择安装文件中的license.dat文件 最后直到安装完成 查看安装是出现下面的内容表示安装好了
[单片机]
<font color='red'>S3C2440</font>学习笔记一 1.1ADS软件的安装
学习笔记--- S3C2440 对NANDFLASH操作原理与测试代码分析
首先来看一下NANDFLASH接口: 图上看出只有数据口和控制口,没有地址线,所以它不能像网卡,SDRAM那样统一寻址,它的操作方法步骤: 1 使能芯片 2 发操作指令(读,写,擦,复位) 3 发操作地址 5 等待忙信号释放(只有读) 6 发送数据(写),接收数据(读) 7 等待忙信号,低电平忙 8 禁能芯片 这些控制信号线都是通过软件设置寄存器,然后硬件自动产生其他控制线的控制信号; 操作信号含义如下: R/B :读/忙状态线 CE : 片选 CLE :发送指令信号 ALE :发送地址信号 WE:写信号 RE:读信号 这里要注意的: 1 数据按字节传输,刚好8位
[单片机]
学习笔记--- <font color='red'>S3C2440</font> 对NANDFLASH操作原理与测试代码分析
s3c2440 存储系统和I/O空间 认识
用友善之臂的板子已经有一段时间了.对于存储系统和I/O空间的认识也渐渐淡忘了,原因是在做其他开发时,一直用着自带的启动代码,从不关心板子的储存空间配置.最近在做网卡驱动,突然间就不知道网卡的地址是什么了,于是花点时间总结一下.废话少说.开始吧. 1,板上的存储资源 两个32M的SDRAM. 一个2M的NOR FLASH 一个128M(有些是64M)的NAND FLASH 以上这些资源看原理图便知. 2,板上的I/O资源 这块板子上(准确的说是S3C2440)的I/O空间是用存储映射的方法映射到存储空间上的,也就说I/O空间是要占用存储空间的. 3,各种存储器的区别与各自的用途 为什么这块板子上有那么多存储
[单片机]
<font color='red'>s3c2440</font> 存储系统和I/O空间 认识
ARM9_S3C2440学习(二)ARM状态下的寄存器组织
ARM状态下的寄存器组织见图2.3。ARM有37个32位长的寄存器,包括31个通用寄存器、1个当前程序状态寄存器CPSR(current program status register)、5个备份的程序状态寄存器SPSR(saved program status register)。这37个寄存器并不都是同时可见的。在任意时刻,只有16个通用寄存器(R0~R15)和一个或者两个状态寄存器(CPSR和SPSR)对处理器来讲是可见的。 1. 通用寄存器 31个通用寄存器用R0~R15表示,可以分为三类: ●未分组寄存器R0~R7。 ●分组寄存器R8~R14。 ●程序计数器PC(R15)。 (1)未分组寄存器R0~R7   在所有的
[单片机]
ARM9_S3C2440学习(二)ARM状态下的寄存器组织
mini2440也即S3C2440地址分配问题
写这篇文章完全是回答一个网友的问题,因为我之前也是对这里不理解,现在简单说一下。源引问题“mini2440的地址到底是怎么分配的呢?内部rom ram 外部的ram和rom分别占用的地址是多少啊,我从板子上看到有3个k4561632N芯片还有一个S29AL016J70TF102.但是看了相关的电路图也不知道他的地址是怎么分配的” 你问的是mini2440的地址怎么分配。我只能再细节一下你的问题,mini2440处理器的地址怎么分配。mini2440的处理器是S3C2440,理论上,S3C2440处理器可以使用的物理地址空间可以达到4GB,其中前1GB的地址(也就是0x0000 0000--0x4000 0000)为外设地址空间
[单片机]
mini2440也即<font color='red'>S3C2440</font>地址分配问题
基于S3C2440加速度传感器的自由摆平板控制系统的设计
本设计的重点在于通过加速度传感器MMA7455采集各关节处角度信息,并根据得到的角度值及任务要求控制步进电机的运转,完成自由摆臂末端平板姿态的调整,完成预定任务。通过MMA7455加速度传感器得到的是三轴加速度信息,而在实际控制过程中所需要的是角度信息,所以要用到三角函数完成加速度值到角度值的转换,其次实践证明MMA7455加速度传感器稳定性较差,需要通过滑动平均滤波算法对得到的三轴加速度值进行滤波处理,以达到精确控制的目的。而对于步进电机的精确控制则需要PID控制算法以去除控制过程中的抖动,达到自控系统“稳、准、快”的设计要求。综上所述,本系统中存在大量的数据运算及控制算法并且对实时性要求较高,因此选用主频高达400 MHz的S
[单片机]
基于<font color='red'>S3C2440</font>和加速度传感器的自由摆平板控制系统的设计
S3C2440驱动篇之触摸屏驱动分析
一.硬件简介 S3C2440触摸屏接口与ADC接口集成在一起,触摸屏X、Y坐标所产生的模拟信号通过通道7、5输入,2440提供触摸屏接口有4种处理模式:普通转换模式、分离的X/Y轴坐标转换模式、自动X/Y轴坐标转换模式、等待中断模式。具体参考2440硬件手册16章。 二.驱动实现 下面是触摸屏驱动源码,其中使用了linux输入子系统input。暂时还没研究这一块,想深入了解可参考相关资料。 #include linux/errno.h #include linux/kernel.h #include linux/module.h #include linux/slab.h #include linux
[单片机]
热门资源推荐
热门放大器推荐
更多
  •  pdf文件ESP32-C3物联网工程开发实战 (乐鑫科技)
  •  pdf文件AVR单片机C语言轻松学(配视频教程) (严雨,李佳,秦文海)
  •  pdf文件ATmega16单片机C语言程序设计经典实例 (陈忠平)
  •  pdf文件ARM嵌入式系统原理与应用 (王晓峰)
  •  汽车机电一体化控制系统:应用与解决方案(下)
  •  48 V总线兼容1.2 V/100 A双降压DC-DC转换器
  •  深度学习数学:理解神经网络
  •  自动控制原理(第七版)
小广播
下载白皮书赢好礼:Multi-Die 系统的早期架构性能和功耗分析
活动时间:即日起-2024年8月5日
2024 DigiKey 应用说:蓝牙5.4新特性解读和实例演示
大联大有奖直播:最新功能安全牵引逆变器方案:助力汽车提升续航与节省成本!预约有礼~
活动时间:07月04日 上午 10:00
有奖直播 | 国产FPGA安路科技2024线上新品发布会
直播时间:7月8日(周一) 10:00
【资料合集】汽车总线基础、系统开发,限时免积分下载
MPS有奖活动|绿色AI“芯” 动力,探索节能低碳的AI供电方案!
即日起—8月31日
Vicor| 适用于电池生命周期各个阶段的高密度电源转换器
即日起——08月31日
学干货赢【京东卡】 | 来PI PowiGaN技术学习中心,解密高可靠性和耐用性氮化镓(GaN)技术
即日起—7月7日
下载汽车电气化精品文章,赢【体脂秤、罗技鼠标、手持风扇】,开启MPS汽车技术进阶之旅!
即日起—7月7日
报名赢京东卡:英飞凌针对电动工具的高功率、高效率以及高可靠性解决方案
直播时间:7月3日(周三)下午14:00
下载白皮书赢好礼:Multi-Die 系统的早期架构性能和功耗分析
活动时间:即日起-2024年8月5日
2024 DigiKey 应用说:蓝牙5.4新特性解读和实例演示
大联大有奖直播:最新功能安全牵引逆变器方案:助力汽车提升续航与节省成本!预约有礼~
活动时间:07月04日 上午 10:00
有奖直播 | 国产FPGA安路科技2024线上新品发布会
直播时间:7月8日(周一) 10:00
【资料合集】汽车总线基础、系统开发,限时免积分下载
MPS有奖活动|绿色AI“芯” 动力,探索节能低碳的AI供电方案!
即日起—8月31日
Vicor| 适用于电池生命周期各个阶段的高密度电源转换器
即日起——08月31日
学干货赢【京东卡】 | 来PI PowiGaN技术学习中心,解密高可靠性和耐用性氮化镓(GaN)技术
即日起—7月7日
下载汽车电气化精品文章,赢【体脂秤、罗技鼠标、手持风扇】,开启MPS汽车技术进阶之旅!
即日起—7月7日
报名赢京东卡:英飞凌针对电动工具的高功率、高效率以及高可靠性解决方案
直播时间:7月3日(周三)下午14:00
添点儿料...
无论热点新闻、行业分析、技术干货……
发布文章
推荐内容
热门活动
换一批
更多
下载白皮书赢好礼:Multi-Die 系统的早期架构性能和功耗分析
免费申请 | 最新一代树莓派(Raspberry Pi 5)
报名最后5天:英飞凌针对电动工具的高功率、高效率以及高可靠性解决方案
最后2天 | 泰克 MSO6B 探索营:设计资源集锦
#最能打国产芯#能打入汽车电子这片地的国产芯,有多少啦?
设计资源 培训 开发板 精华推荐
  • 【下载】LAT6021 在STM32MP13x系列MPU上裸跑应用程序
  • 【下载】LAT1406 STM32F7在800x480及24位色深显示撕裂问题的分析和解决
  • 【下载】LAT6022 STM32MP13x低功耗的使用和注意事项
  • 【下载】RM0456 STM32U5系列基于Arm®内核的32位MCU
  • 【下载】LAT1373 STM32CubeIDE实用技巧之快捷键的配置
  • 【下载】LAT1378 STM32CubeIDE实用技巧之Flash代码填充

最新单片机文章
  • 成功移植DHCP客户端到mini2440
    1,下载源码:http: gd tuwien ac at infosys servers isc dhcp ,选中 dhcp-3 1 3 tar gz;2,解压 tar -zxvf dhcp-3 1 3 tar gz, ...
  • mini2440 移植Linux2.6.30.10 及yaffs2文件系统
    究了四天linux内核移植和文件系统制作,总算移植成功,在这里和大家分享一下,我是一个初学者,有不对的地方,请大家指点。一,准备工作1, ...
  • mini2440 实现u-boot的usb slave下载功能
    友善公司不知为何,一直没有发布一个好用的u-boot。之前已移植过2008 10版的u-boot,最近,又移植了2009 08的u-boot。移植完毕后,总觉得友 ...
  • mini2440上移植sqlite3.7.6.2
    一 、 开发环境:Mini2440 , linux-2 6 38 2 内核,Fedora, arm-linux-gcc-4 3 2在http: www sqlite org 上下载 sqlite 源代 ...
  • ARMBoot-1.1.0 在 mini2440 开发板上的移植
    作为U-boot的鼻祖-ARMboot以其小巧玲珑(代码压缩包仅有400K多),但又麻雀虽小,五脏俱全,不失为研究U-boot的第一步,而且在ARMboot中处 ...
  • 解决mini2440声卡全双工问题 实现同时录音及播放
  • mini2440之Linux 2.6.34内核编译
  • Uncompressing Linux...done, booting the kernel解决办法
  • 基于mini2440触摸屏驱动
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

  • 《单片机与嵌入式系统应用》历年文章目录
  • 物联网时代的嵌入式系统机遇
  • 从嵌入式系统视角看物联网
更多精选电路图
  • 铅酸电池充电器的电路图
  • 基于LM358的红外接近传感器电路
  • 如何利用RFID实现扫描仪的设计
  • 基于混音器的场效应管电路图
  • 基于LTC3440的升压转换器电路图
  • 基于TL062的低音炮低通滤波器电路
换一换 更多 相关热搜器件
  •  AS7341-DLGM
  •  NJU72343V-TE1
  •  UT6MA2TCR
  •  MPX5700D
  •  5-173118-2
  •  RV30YDME15C103K
  •  EBM22DCTH
  •  D38999-26WH53HC
  •  BU-61743G4-800Y
  •  ERJ-12SF1470U
更多热门文章
  • 进化十多年,四足机器人的有何改变?
  • 无钴电池能否占据动力电池市场C位?
  • OPPO又一新机通过认证 拥有6.56英寸打孔屏
  • 三星在AR和VR领域落后于苹果 原因为迷恋可折叠智能手机
  • 激光共聚焦显微测量技术在汽车工业上的应用
  • LPC824-SPI接口
更多每日新闻
  • 智能驾驶半导体芯片的本土化供应需求
  • 2024年车载显示7大热点趋势
  • 跨域融合剑指「舱驾一体」!10家企业这样谋划
  • 欣旺达:大不了,鱼死网破
  • 大众汽车和赛轮思推出“车载” 生成式AI解决方案
  • 丰田押注混动,国内车企跟不跟?
  • 汽车挡风玻璃的神奇变身:3D 显示屏黑科技来袭
  • 小米汽车车载单品智能底盘氛围灯上线 :六色等效 驻车点亮
  • 以第六代雷达,开打丨专访
  • 智能交互前显示灯热度攀升,车灯企业加码布局
更多往期活动
  • 关注有礼:炎炎夏日,泰克原厂探头清凉大促,及时帮您解决精准测试的大问题
  • 下载有好礼!超多精美礼品等您拿!
  • 有奖直播:新科技、新课堂、新学期~ ADI软件定义无线电ADALM-Pluto入门实战
  • TI 最新CapTIvate™ 触控微控制器技术直播开始报名喽!报名参与有礼呦!
  • TI 嵌入式主题直播月——为高效、智能、低功耗系统设计助力
  • 点评Deyisupport精品博文 抢楼赢好礼!
  • 有奖直播:远近皆宜的无线连接方案 3月25日(周四)上午10:00 邀您观看!
  • 有奖直播|堵车路上听什么?新世代车载音频系统及软件定义汽车
  • PI有奖问答第二期 看视频 读资料 答题赢好礼
  • 有奖直播:DIY 家用监控边缘 AI Box——基于 8TOPS 算力,售价 199 美元的开发套件搭建深度学习案例
厂商技术中心

TI 技术论坛

TI 在线培训

Qorvo 射频技术研习社

随便看看
  • 手机RF设计技巧(三)
  • 电赛小车大家都用什么电源
  • PIC16F877A CCP输入捕捉问题
  • 解决"PL2303HXA自2012已停产,请联系供货商" USB不识别的问题
  • 能不能是输出的PWM移相180度
  • Altera IP
  • 关于STM8的开发,看了半天,还是一头雾水。
  • CCS5烧写问题 和GRAPH显示
  • 网络控制单片机proteus仿真
  • CCS5.2如何进行仿真并波行输出

About Us 关于我们 客户服务 联系方式 器件索引

文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>