linux spi写数据,但是示波器检测不到(求高手解答)
我的spi驱动代码如下:
#include <linux/completion.h>
#include <linux/kernel.h>
#include <linux/platform_device.h>
#include <linux/dma-mapping.h>
#include <linux/slab.h>
#include <linux/uaccess.h>
#include <linux/input.h>
#include <linux/device.h>
#include <linux/init.h>
#include <linux/delay.h>
#include <linux/spi/spi.h>
#include <linux/module.h>
#include <linux/timer.h>
#include <linux/param.h>
#include <linux/jiffies.h>
#include "nn1001.h"
MODULE_LICENSE("Dual BSD/GPL");
const char send_data[16] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
static int count;
struct timer_list nn1001_timer;
struct nn1001_bus_ops *ops;
struct spi_device *nn1001_spi;
struct mutex nn1001_lock;
write1(struct spi_device *spi, const void *buf, size_t len)
{
printk(KERN_ALERT "------enter write1---------\n");
struct spi_transfert = {
.tx_buf= buf,
.len= len,
};
struct spi_messagem;
spi_message_init(&m);
printk(KERN_ALERT "------add spi_transfer to spi_message-------\n");
spi_message_add_tail(&t, &m);
printk(KERN_ALERT "------spi_sync---------\n");
return spi_sync(spi, &m);
}
static void nn1001_timeout_function(unsigned long arg)
{
printk(KERN_ALERT "------enter timeout function count:%d------",count);
count++;
mutex_lock(&nn1001_lock);
printk(KERN_ALERT "send_data is :%d,%d,%d\n",send_data[0],send_data[1],send_data[2]);
write1(nn1001_spi,send_data,16);
//spi_write(nn1001_spi,send_data,16);
mutex_unlock(&nn1001_lock);
printk(KERN_ALERT "spi write end !");
mod_timer(&nn1001_timer, jiffies+HZ);
//add_timer(&nn1001_timer);
}
static int __devinit nn1001_probe(struct spi_device *spi)
{
printk(KERN_ALERT "enter nn1001 probe function \n");
nn1001_spi = spi;
mutex_init(&nn1001_lock);
struct nn1001_platform_data *pdata = nn1001_spi->dev.platform_data;
if (pdata->power_enable)
{
printk(KERN_ALERT "enter power_enable \n");
pdata->power_enable(1);
}
/* Call out to platform specific setup */
if (pdata->board_specific_setup)
{
printk(KERN_ALERT "enter board_specific_setup\n");
pdata->board_specific_setup(spi);
}
nn1001_spi->mode = SPI_MODE_0;
nn1001_spi->bits_per_word = 8;
printk(KERN_ALERT "start setup spi");
spi_setup(nn1001_spi);
init_timer(&nn1001_timer);
nn1001_timer.expires = jiffies + 2*HZ;
nn1001_timer.data = 123;
nn1001_timer.function = nn1001_timeout_function;
printk(KERN_ALERT "init timer end\n");
add_timer(&nn1001_timer);
printk(KERN_ALERT "add timer end \n");
}
static const struct spi_device_id nn1001_id_table[] = {
{ "nn1001", SPI_NN1001},
{ },
};
MODULE_DEVICE_TABLE(spi, nn1001_id_table);
static struct spi_driver nn1001_driver = {
.driver = {
.name = "nn1001",
.bus = &spi_bus_type,
.owner = THIS_MODULE,
},
.id_table = nn1001_id_table,
.probe = nn1001_probe,
};
static int __init nn1001_init(void)
{
printk(KERN_ALERT "enter nn1001 driver");
return spi_register_driver(&nn1001_driver);
}
static void __exit nn1001_exit(void)
{
printk(KERN_ALERT "exit nn1001 driver");
spi_unregister_driver(&nn1001_driver);
}
module_init(nn1001_init);
module_exit(nn1001_exit);
下面是加载驱动后关键的调试信息
------enter timeout function count:0------
send_data is :1,2,3
------enter write1---------
------add spi_transfer to spi_message-----1090518284---
------spi_sync---------
BUG: scheduling while atomic: swapper/0/0x40000100
spi write end !
pin脚上上只有spiclk有信号,是代码的问题吗?急阿,求大神们速速帮忙
[解决办法]
都没人知道吗?自己顶一下
[解决办法]
问题以解决。。。