您的位置:首页 > 其它

杂七杂八的

2015-10-26 11:32 429 查看
内存映射MemoryMap

飞思的BSP已经实现了一个预定义的物理地址到虚拟地址映射表,

在arch/arm/mach-mx5/mm.c中实现了。

一些关键的宏定义在arch/arm/plat-mxc/include/mach/hardware.h中定义用于物理地址、虚拟地址的基地址或物理地址到虚拟地址的映射宏。

一、IOMUX

IOMUXC软件实现部分提供了API直接对寄存器进行操作。

IOMUXC实现的代码在下列的文件中:

Arch/arm/plat-mxc/iomux-v3.c IOMUXC函数实现,在基地址+控制寄存器常量,进行读写

Arch/arm/plat-mxc/include/mach/iomux-mx53.h  定义了各个PAD的模式常量,可以直接使用

Arch/arm/plat-mxc/include/mach/iomux-v3.h IOMUXC API说明文件,设置基地址,设置/获取PAD值(单一或群组)

使用freescalebsp提供的API可以直接对IOMUX进行操作。所以必须要先看上面的3个文件!!!!必须要看懂!!!

二、GPIO

由于GPIO支持中断,所以预定义的中断号以 NR_IRQS形式给出来了。

可以使用宏IOMUX_TO_IRQ_V3()或gpio_to_irq()将GPIO引脚转换成IRQ号。

设置一个IOMUX引脚,使用mxc_iomux_v3_setup_pad()。

如果引脚被用做GPIO,则就要使用gpio_request()和gpio_free()函数。用户应该检测返回值以防止被占用。

Gpio_direction_input()用于设置GPIO为输入

Gpio_direction_output()用于设置GPIO为输出

GPIO的实现部分提供了以下的支持:1、访问硬件GPIO模块;2、控制GPIO方向和中断

Arch/arm/plat-mxc/include/mach/gpio.h 头文件定义

Arch/arm/plat-mxc/include/mach/gpio.c 函数实现及GPIO寄存器定义

这两个文件一定要看!!!这样就会使用freescale bsp提供的API直接访问GPIO了。

1. arch/arm/plat-mxc/include/mach/Mx5x.h

定义了寄存器的物理地址,中断号等

2. arch/arm/mach-mx5/Devices.c

定义了平台设备资源结构体,平台设备结构体

3. arch/arm/plat-mxc/Gpio.c

arch/arm/plat-mxc/Gpio.h

定义了一些操作GPIO寄存器的函数和宏

在arch/arm/mach-mx5/mx53_smd.c中调用mxc_register_device()注册了各种片上设备,这个函数本质上是调用了platform_device_register(),以平台设备的方式展现出来了。这个可以通过/sys/bus/platform/devices目录中看出来。如下:

/sys/bus/platform/devices# ls

FlexCAN.0 imx-3stack-sgtl5000.0 mxc_ssi.1

WLED-1 imx-i2c.0 mxc_v4l2_capture.0

WLED-2 imx-i2c.1 mxc_v4l2_output.0

WLED-3 imx-i2c.2 mxc_vpu.0

ahci.0 imx-spdif-audio-device.0 mxc_wdt.0

android_pmem.0 mxc_asrc.0 mxcintuart.0

android_pmem.1 mxc_bt_rfkill.0 mxcintuart.1

android_usb mxc_ddc.0 mxcintuart.2

busfreq.0 mxc_dvfs_core.0 mxcintuart.3

da9052-adc mxc_gpu.0 mxcintuart.4

da9052-bat mxc_iim.0 mxsdhci.0

da9052-leds mxc_ipu mxsdhci.1

da9052-onkey mxc_ldb mxsdhci.2

da9052-regulator mxc_pwm.1 ptp.0

da9052-rtc mxc_rtc.0 pwm-backlight.0

da9052-tsi mxc_scc.0 reg-fixed-voltage.0

da9052-wdt mxc_sdc_fb.0 rndis

fec.0 mxc_sdc_fb.1 soc-audio

fsl-ehci.0 mxc_sdc_fb.2 soc-audio.2

fsl-ehci.1 mxc_sdma tve.0

fsl-usb2-otg mxc_spdif.0 usb_mass_storage

fsl-usb2-udc mxc_spi.0 usb_wakeup.0

gpio-keys mxc_ssi.0 usb_wakeup.1

/sys/bus/platform/devices#

上面列出来的设备都是通过platform_device_register()注册的。

既然平台设备有了,下一步就是再找一下相应的平台驱动。

在drivers/spi/Mxc_spi.c中实现了spi平台驱动程序platform_device mxc_spi_driver;

由于平台驱动也是通过platform_driver_register()注册的,所以在sysfs文件系统中也能找到。在/sys/bus/platform/drivers/目录下。

/sys/bus/platform/drivers# ls

FlexCAN mc34708_adc mxc_ssi

arm-pmu mx51_lpmode mxc_v4l2_output

busfreq mx5_pm mxc_vpu

da9052-adc mxc-pxp mxc_wdt

da9052-onkey mxc_asrc mxcintuart

da9052-regulator mxc_dvfs_core mxcpwrkey

da9052-tsi mxc_dvfsper mxs_viim

fec mxc_epdc_fb mxsdhci

fsl-ehci mxc_esai pmic_leds

fsl-usb2-otg mxc_gpu pmic_light

fsl-usb2-udc mxc_i2c_hs pmic_rtc

generic-bl mxc_iim ptp

gpio-keys mxc_ipu pwm-backlight

imx-3stack-sgtl5000 mxc_keypad pxp-device

imx-i2c mxc_ldb reg-fixed-voltage

imx-spdif-audio-device mxc_mc13892_bl sdram_autogating

lcd_spi mxc_nandv2_flash smsc911x

ltc3589-regulator mxc_pwm soc-audio

max17135-reg mxc_rtc spi_imx

max17135_sensor mxc_sdc_fb tve

mc13892-regulatr mxc_sdma usb_wakeup

mc13892_adc mxc_spdif

mc34708-regulatr mxc_spi

/sys/bus/platform/drivers#

从上面可以看到mxc_spi驱动程序。

为了验证一下,把我写的led驱动程序动态加载到内核中。

加载平台设备模块 insmod led_device.ko

加载平台驱动模块 insmod led_driver.ko

这样

在/sys/bus/platform/devices目录下就有了imx5_led.0

在/sys/bus/platform/drivers目录下就有了imx5_led

这两个是对应的。

版权声明:本文为博主原创文章,未经博主允许不得转载。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: