原文地址:http://blog.163.com/joyrain_06/blog/static/1788253920113823524293/
一、环境
硬件:s3c2440
内核:Linux2.30.4
交叉编译工具:EABI4.3.3
开发环境:rhel5.5
二、移植
1.修改arch/arm/mach-s3c2440/mach-mini2440.c文件:
a.加入头文件
#include <../mach-s3c2410/include/mach/spi.h>
#include <linux/spi/spi.h>
b.加入接口结构
/* SPI */
static struct spi_board_info s3c2410_spi0_board[] = {
[0] = {
.modalias = "spidev",
.bus_num= 0,
.chip_select= 0,
/* s3c2410_spi0_platdata.num_cs */
.irq = IRQ_EINT9,
.max_speed_hz= 96*1000*1000,
},
};
static struct s3c2410_spi_info s3c2410_spi0_platdata = {
.pin_cs = S3C2410_GPG2,
.num_cs = 1,
.bus_num = 0,
.gpio_setup=s3c24xx_spi_gpiocfg_bus0_gpe11_12_13,
};
c.加入设备
static struct platform_device *tq2440_devices[] __initdata = {
&s3c_device_usb,
&s3c_device_lcd,
&s3c_device_wdt,
&s3c_device_i2c0,
&s3c_device_iis,
&s3c_device_rtc,
#ifdef CONFIG_DM9000
&s3c_device_dm9000,
#endif
&s3c_device_usbgadget,
&s3c_device_uda134x,
&s3c_device_spi0, //注意在结构体中的位置,否则会出现编译错误
//&s3c_device_spi1, //for spi1
};
d.注册设备
static void __init tq2440_machine_init(void)
{
s3c24xx_fb_set_platdata(&tq2440_fb_info);
s3c_i2c0_set_platdata(NULL);
platform_add_devices(tq2440_devices, ARRAY_SIZE(tq2440_devices));
EmbedSky_machine_init();
/*SPI*/
s3c_device_spi0.dev.platform_data= &s3c2410_spi0_platdata;
spi_register_board_info(s3c2410_spi0_board, ARRAY_SIZE(s3c2410_spi0_board));
//s3c_device_spi1.dev.platform_data= &s3c2410_spi1_platdata; //for spi1
//spi_register_board_info(s3c2410_spi1_board, ARRAY_SIZE(s3c2410_spi1_board)); //for spi1
s3c2410_gpio_setpin(S3C2410_GPG12, 0);
s3c2410_gpio_cfgpin(S3C2410_GPG12, S3C2410_GPIO_OUTPUT);
s3c24xx_udc_set_platdata(&EmbedSky_udc_cfg);
}
2.修改Kconfig
打开arch/arm/plat-s3c24XX/Kconfig
找到
////////////
config S3C24XX_SPI_BUS0_GPE11_GPE12_GPE13
bool
help
SPI GPIO configuration code for BUS0 when connected to
GPE11, GPE12 and GPE13.
config S3C24XX_SPI_BUS1_GPG5_GPG6_GPG7
bool
help
SPI GPIO configuration code for BUS 1 when connected to
GPG5, GPG6 and GPG7.
修改为
# SPI default pin configuration code
config S3C24XX_SPI_BUS0_GPE11_GPE12_GPE13
bool "S3C24XX_SPI_BUS0_GPE11_GPE12_GPE13"
help
SPI GPIO configuration code for BUS0 when connected to
GPE11, GPE12 and GPE13.
config S3C24XX_SPI_BUS1_GPG5_GPG6_GPG7
bool "S3C24XX_SPI_BUS1_GPG5_GPG6_GPG7"
help
SPI GPIO configuration code for BUS 1 when connected to
GPG5, GPG6 and GPG7.
3.编译内核
#make menuconfig
System Type --->
[*] S3C24XX_SPI_BUS0_GPE11_GPE12_GPE13
[ ] S3C24XX_SPI_BUS1_GPG5_GPG6_GPG7
Device Drivers --->
[*] SPI support --->
--- SPI support
*** SPI Master Controller Drivers ***
-*- Utilities for Bitbanging SPI masters
<*> GPIO-based bitbanging SPI Master
<*> Samsung S3C24XX series SPI
<*> Samsung S3C24XX series SPI by GPIO
*** SPI Protocol Masters ***
<*> User mode SPI device driver support
< > Infineon TLE62X0 (for power switching)
保存
#make zImage
4.测试
../Documentation/spi
arm-linux-gcc -I/root/linux-2.6.30.4/include spidev_test.c
后会生成a.out的spi测试程序;
拷入文件系统运行可看到结果(将MISO和MOSI短接)
5.结果
./a.out
spi mode: 0
bits per word: 8
max speed: 96000000 Hz (96000 KHz)
FF FF FF FF FF FF
40 00 00 00 00 95
FF FF FF FF FF FF
FF FF FF FF FF FF
FF FF FF FF FF FF
DE AD BE EF BA AD
F0 0D
测试结果正确。
用示波器查看波形t=20ns*2 并且数据波形正确
参考:http://www.arm9home.net/read.php?tid-4422.html
http://www.arm9home.net/read.php?tid-2378-keyword-spi.html
http://www.arm9home.net/read.php?tid-3620-keyword-spi.html
分享到:
相关推荐
1.基于s3c2440的led驱动设计、驱动...4.基于s3c2440的中断poll驱动设计、驱动调用应用程序设计; 5.基于s3c2440的异步中断驱动设计、驱动调用应用程序设计; 6.基于s3c2440的中断阻塞驱动设计、驱动调用应用程序设计;
s3c2440a_5MemoryController(储存器控制器).pdf s3c2440a_6NandFlash.pdf s3c2440a_7clock&power;(时钟电源).pdf s3c2440a_8DMA.pdf s3c2440a_10PWM&Timer;...s3c2440a_22SPI.pdf s3c2440a_24AC97.pdf
s3c2440中文手册(全) 包括:s3c2440a_5MemoryController.pdf s3c2440a_6NandFlash.pdf s3c2440a_7clock&power.pdf s3c2440a_8DMA.pdf s3c2440a_10PWM&Timer.pdf s3c2440a_11UART.pdf s3c2440a_14INTCtrl.pdf s3c...
基于S3C2440的嵌入式Linux开发实例教程书籍;arm9系列书籍
这是linux2.6.12内核下的s3c2440的spi传输驱动程序
基于S3C2440的嵌入式Linux开发实例
基于S3C2440的Demo程序.rar 基于S3C2440的LED程序.rar 基于S3C2440的Memory程序.rar 基于S3C2440的NandFlash程序.rar 基于S3C2440的Run in NandFlash程序.rar 基于S3C2440的USB程序.rar
s3c2440基于VxWork的SPI驱动
基于S3C2440的u-boot移植详解
基于S3C2440的嵌入式Linux内核移植及字符设备驱动开发.pdf
基于s3c2440的Linux摄像头驱动开发
基于S3C2440+Linux的无线射频模块的驱动程序设计
基于S3C2440嵌入式Linux的伺服电机控制.pdf
s3c2440A linux内核移植步骤 s3c2440A linux内核移植步骤 s3c2440A linux内核移植步骤 s3c2440A linux内核移植步骤 s3c2440A linux内核移植步骤
基于S3C2440的嵌入式Linux系统移植 (1).pdf
通过S3C2440的SPI接口,控制数码管显示不同的字符
基于S3C2440的Linux内核移植和yaffs2文件系统制作,是一个移植手册,如果移植失败 ,可能是编译器的版本或者系统的问题
第一章 移植内核... 2 1.1 Linux内核基础知识... 2 1.1.1 Linux版本... 2 1.1.2 什么是标准内核... 2 1.1.3 Linux操作系统的分类... 3 1.1.4 linux内核的选择... 4 1.2 Linux内核启动过程概述... 5 1.2.1 ...
基于mini2440的 dht11温湿度采集驱动
基于S3C2440的嵌入式Linux开发实例.pdf