linux用户层下通过spi配置idt8a34002

#include <stdint.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <getopt.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/types.h>
#include <linux/spi/spidev.h>

static void pabort(const char *s)
{
    perror(s);
    abort();
}

static uint32_t mode;
static uint8_t bits = 8;
static uint32_t speed = 100000;
static uint16_t delay;

uint8_t reg_addr_value[16] = {0};

typedef struct _spi_t8a34002_reg {
    unsigned int reg_size;
    unsigned long reg_addr;
    unsigned long reg_value;
    unsigned int reg_flag;
}spi_t8a34002_reg_t;

spi_t8a34002_reg_t spi_t8a34002_reg_value[] = 
{
    {0x4, 0x7C, 0x00C01020, 1},
    {0x4, 0x7C, 0x00C11020, 1},
    {0x2, 0x60, 0x0000, 1},
    {0x6, 0x64, 0x000000000000, 1},
    {0x2, 0x6C, 0x0000, 1},
    {0x1, 0x71, 0x00, 1},
    {0x4, 0x7C, 0x80C11020, 1},
    {0x1, 0x12, 0x00, 1},
    {0x6, 0x14, 0x002D31010000, 1},
    {0x1, 0x1B, 0x00, 1},
   //{0xA, 0x24, 0x000012FDED02FFFF8940},
        {0x5, 0x24, 0x000012FDED, 0},
        {0x4, 0x02, 0xFFFF8940, 1},
    {0x6, 0x30, 0x010000000000, 1},
    {0x2, 0x38, 0x0100, 1},
    {0x1, 0x3D, 0x01, 1},
    //{0xA, 0x40, 0x0040420F00007D000100},
        {0x5, 0x40, 0x0040420F00, 0},
        {0x4, 0x00, 0x7D000100, 1},
    {0x2, 0x4C, 0x0101, 1},
    {0x6, 0x50, 0x40787D010000, 1},
    {0x2, 0x58, 0x0100, 1},
    {0x2, 0x5C, 0x0201, 1},
    {0x4, 0x7C, 0x00C21020, 1},
    {0x6, 0x00, 0x40787D010000, 1},
    {0x2, 0x08, 0x0100, 1},
    {0x2, 0x0C, 0x0301, 1},
    //{0xA, 0x10, 0x0000093D00007D000100},
        {0x5, 0x10, 0x0000093D00, 0},
        {0x4, 0x00, 0x7D000100, 1},
    {0x2, 0x1C, 0x0401, 1},
    //{0xA, 0x20, 0x0000093D00007D000100},
        {0x5, 0x20, 0x0000093D00, 0},
        {0x4, 0x00, 0x7D000100, 1},
    {0x2, 0x2C, 0x0501, 1},
    {0x2, 0x38, 0x0100, 1},
    {0x2, 0x3C, 0x0600, 1},
    {0x2, 0x4C, 0x0720, 1},
    {0x6, 0x50, 0x010000000000, 1},
    {0x2, 0x58, 0x0100, 1},
    {0x2, 0x5C, 0x0801, 1},
    //{0xA, 0x60, 0x0040420F00007D000100},
        {0x5, 0x60, 0x0040420F00, 0},
        {0x4, 0x00, 0x7D000100, 1},
    {0x2, 0x6C, 0x0901, 1},
    {0x4, 0x7C, 0x80C21020, 1},
    {0x6, 0x00, 0x40787D010000, 1},
    {0x2, 0x08, 0x0100, 1},
    {0x2, 0x0C, 0x0A01, 1},
    {0x6, 0x10, 0x40787D010000, 1},
    {0x2, 0x18, 0x0100, 1},
    {0x2, 0x1C, 0x0B01, 1},
    //{0xA, 0x20, 0x0000093D00007D000100},
        {0x5, 0x20, 0x0000093D00, 0},
        {0x4, 0x00, 0x7D000100, 1},
    {0x2, 0x2C, 0x0C01, 1},
    {0x2, 0x38, 0x0100, 1},
    {0x2, 0x3C, 0x0D00, 1},
    {0x2, 0x4C, 0x0E00, 1},
    {0x2, 0x5C, 0x0F40, 1},
    {0x1, 0x6B, 0x03, 1},
    {0x1, 0x77, 0x03, 1},
    {0x4, 0x7C, 0x00C31020, 1},
    {0x1, 0x0B, 0x03, 1},
    {0x1, 0x17, 0x03, 1},
    {0x1, 0x23, 0x03, 1},
    {0x1, 0x2F, 0x03, 1},
    {0x1, 0x38, 0x00, 1},
    {0x1, 0x3B, 0x00, 1},
    {0x1, 0x42, 0x00, 1},
    {0x1, 0x47, 0x00, 1},
    {0x1, 0x53, 0x03, 1},
    {0x1, 0x5F, 0x03, 1},
    {0x1, 0x6B, 0x03, 1},
    {0x1, 0x74, 0x00, 1},
    {0x1, 0x77, 0x03, 1},
    {0x4, 0x7C, 0x80C31020, 1},
    {0x1, 0x0B, 0x03, 1},
    {0x1, 0x17, 0x00, 1},
    {0x1, 0x23, 0x00, 1},
    {0x1, 0x2F, 0x00, 1},
    {0x1, 0x33, 0x02, 1},
    {0x1, 0x36, 0x00, 1},
    {0x2, 0x3B, 0x0A01, 1},
    {0x1, 0x5B, 0x00, 1},
    {0x2, 0x62, 0x2828, 1},
    {0x1, 0x67, 0x00, 1},
    {0x4, 0x7C, 0x00C41020, 1},
    {0x2, 0x0B, 0x0A01, 1},
    {0x2, 0x32, 0x2828, 1},
    {0x1, 0x37, 0x00, 1},
    {0x2, 0x43, 0x0A01, 1},
    {0x2, 0x6A, 0x2828, 1},
    {0x1, 0x6F, 0x00, 1},
    {0x4, 0x7C, 0x80C41020, 1},
    {0x2, 0x0B, 0x0A01, 1},
    {0x2, 0x32, 0x2828, 1},
    {0x1, 0x37, 0x00, 1},
    {0x2, 0x43, 0x0A01, 1},
    {0x1, 0x6F, 0x00, 1},
    {0x4, 0x7C, 0x00C51020, 1},
    {0x2, 0x0B, 0x0A01, 1},
    {0x1, 0x37, 0x00, 1},
    {0x2, 0x43, 0x0A01, 1},
    {0x1, 0x6F, 0x00, 1},
    {0x4, 0x7C, 0x80C51020, 1},
    {0x2, 0x0B, 0x0A01, 1},
    {0x1, 0x37, 0x00, 1},
    {0x2, 0x3B, 0x0A01, 1},
    {0x1, 0x3F, 0x25, 1},
    {0x1, 0x54, 0x00, 1},
    {0x4, 0x7C, 0x00C61020, 1},
    {0x6, 0x00, 0x000000041980, 1},
    {0x3, 0x07, 0x000000, 1},
    {0x1, 0x0B, 0x00, 1},
    {0x3, 0x0D, 0x000000, 1},
    {0x1, 0x11, 0x00, 1},
    {0x1, 0x13, 0x00, 1},
    {0x2, 0x18, 0x0000, 1},
    //{0xD, 0x1B, 0x000000BAE1451EFFFF0000461E},
        {0x6, 0x1B, 0x000000BAE145, 0},
        {0x6, 0x1E, 0xFFFF0000461E, 1},
    {0x1, 0x2D, 0x00, 1},
    {0x1, 0x35, 0x00, 1},
    {0x1, 0x37, 0x2A, 1},
    //{0x9, 0x39, 0x000000000000041980},
        {0x4, 0x39, 0x00000000, 0},
        {0x4, 0x00, 0x00041980, 1},
    {0x3, 0x43, 0x000000, 1},
    {0x1, 0x47, 0x00, 1},
    {0x3, 0x49, 0x000000, 1},
    {0x1, 0x4D, 0x00, 1},
    {0x1, 0x4F, 0x00, 1},
    {0x2, 0x54, 0x0000, 1},
    //{0xD, 0x57, 0x00009B3247CD1DFFFF24F40000},
        {0x6, 0x57, 0x00009B3247CD, 0},
        {0x6, 0x1D, 0xFFFF24F40000, 1},
    {0x1, 0x69, 0x00, 1},
    {0x1, 0x71, 0x00, 1},
    {0x1, 0x73, 0x2A, 1},
    {0x3, 0x75, 0x000000, 1},
    {0x4, 0x7C, 0x80C61020, 1},
    {0x6, 0x00, 0x000000041980, 1},
    {0x3, 0x07, 0x000000, 1},
    {0x1, 0x0B, 0x00, 1},
    {0x3, 0x0D, 0x000000, 1},
    {0x1, 0x11, 0x00, 1},
    {0x1, 0x13, 0x00, 1},
    {0x2, 0x18, 0x0000, 1},
    //{0xD, 0x1B, 0x00C041FF984025FFFF14000000},
        {0x6, 0x1B, 0x00C041FF9840, 0},
        {0x6, 0x25, 0xFFFF14000000, 1},
    {0x1, 0x2D, 0x00, 1},
    {0x1, 0x35, 0x00, 1},
    {0x1, 0x37, 0x2A, 1},
    //{0x9, 0x39, 0x000000000000041980},
        {0x4, 0x39, 0x00000000, 0},
        {0x4, 0x00, 0x00041980, 1},
    {0x3, 0x43, 0x000000, 1},
    {0x1, 0x47, 0x00, 1},
    {0x3, 0x49, 0x000000, 1},
    {0x1, 0x4D, 0x00, 1},
    {0x1, 0x4F, 0x00, 1},
    {0x2, 0x54, 0x0000, 1},
    //{0x9, 0x57, 0x000000000000000000},
        {0x4, 0x57, 0x00000000, 0},
        {0x4, 0x00, 0x00000000, 1},
    {0x1, 0x63, 0x00, 1},
    {0x1, 0x69, 0x00, 1},
    {0x1, 0x71, 0x00, 1},
    {0x1, 0x73, 0x2A, 1},
    {0x3, 0x75, 0x000000, 1},
    {0x4, 0x7C, 0x00C71020, 1},
    {0x6, 0x00, 0x000000041980, 1},
    {0x3, 0x07, 0x000000, 1},
    {0x1, 0x0B, 0x00, 1},
    {0x3, 0x0D, 0x000000, 1},
    {0x1, 0x11, 0x00, 1},
    {0x1, 0x13, 0x00, 1},
    {0x2, 0x18, 0x0000, 1},
    //{0x9, 0x1B, 0x000000000000000000},
        {0x4, 0x1B, 0x00000000, 0},
        {0x4, 0x00, 0x00000000, 1},
    {0x1, 0x27, 0x00, 1},
    {0x1, 0x2D, 0x00, 1},
    {0x1, 0x35, 0x00, 1},
    {0x1, 0x37, 0x2A, 1},
    //{0x9, 0x39, 0x000000000000041980},
        {0x4, 0x39, 0x00000000, 0},
        {0x4, 0x00, 0x00041980, 1},
    {0x3, 0x43, 0x000000, 1},
    {0x1, 0x47, 0x00, 1},
    {0x3, 0x49, 0x000000, 1},
    {0x1, 0x4D, 0x00, 1},
    {0x1, 0x4F, 0x00, 1},
    {0x2, 0x54, 0x0000, 1},
    //{0xD, 0x57, 0x0000C01722E81DFFFFF5000000},
        {0x6, 0x57, 0x0000C01722E8, 0},
        {0x6, 0x1D, 0xFFFFF5000000, 1},
    {0x1, 0x69, 0x00, 1},
    {0x1, 0x71, 0x00, 1},
    {0x1, 0x73, 0x2A, 1},
    {0x3, 0x75, 0x000000, 1},
    {0x4, 0x7C, 0x80C71020, 1},
    {0x6, 0x00, 0x000000041980, 1},
    {0x3, 0x07, 0x000000, 1},
    {0x1, 0x0B, 0x00, 1},
    {0x3, 0x0D, 0x000000, 1},
    {0x1, 0x11, 0x00, 1},
    {0x1, 0x13, 0x00, 1},
    {0x2, 0x18, 0x0000, 1},
    //{0x9, 0x1B, 0x000000000000000000},
        {0x4, 0x1B, 0x00000000, 0},
        {0x4, 0x00, 0x00000000, 1},
    {0x1, 0x27, 0x00, 1},
    {0x1, 0x2D, 0x00, 1},
    {0x1, 0x35, 0x00, 1},
    {0x1, 0x37, 0x2A, 1},
    //{0x9, 0x39, 0x000000000000041980},
        {0x4, 0x39, 0x00000000, 0},
        {0x4, 0x00, 0x00041980, 1},
    {0x3, 0x43, 0x000000, 1},
    {0x1, 0x47, 0x00, 1},
    {0x3, 0x49, 0x000000, 1},
    {0x1, 0x4D, 0x00, 1},
    {0x1, 0x4F, 0x00, 1},
    {0x2, 0x54, 0x0000, 1},
    //{0x9, 0x57, 0x000000000000000000},
        {0x4, 0x57, 0x00000000, 0},
        {0x4, 0x00, 0x00000000, 1},
    {0x1, 0x63, 0x00, 1},
    {0x1, 0x69, 0x00, 1},
    {0x1, 0x71, 0x00, 1},
    {0x1, 0x73, 0x2A, 1},
    {0x3, 0x75, 0x000000, 1},
    {0x4, 0x7C, 0x00C81020, 1},
    {0x3, 0x00, 0x000004, 1},
    {0x2, 0x04, 0x6480, 1},
    {0x3, 0x07, 0x000000, 1},
    {0x1, 0x0B, 0x00, 1},
    {0x3, 0x0D, 0x000000, 1},
    {0x1, 0x11, 0x00, 1},
    {0x1, 0x13, 0x00, 1},
    {0x2, 0x15, 0x0000, 1},
    {0x1, 0x1B, 0x00, 1},
    {0x1, 0x1F, 0x00, 1},
    {0x1, 0x23, 0x00, 1},
    {0x1, 0x27, 0x00, 1},
    {0x1, 0x2B, 0x00, 1},
    {0x1, 0x2F, 0x00, 1},
    {0x1, 0x33, 0x00, 1},
    {0x1, 0x37, 0x00, 1},
    {0x1, 0x3F, 0x00, 1},
    {0x1, 0x47, 0x00, 1},
    {0x1, 0x4F, 0x00, 1},
    {0x1, 0x57, 0x00, 1},
    {0x1, 0x5F, 0x00, 1},
    {0x1, 0x67, 0x00, 1},
    {0x1, 0x6F, 0x00, 1},
    {0x1, 0x77, 0x00, 1},
    {0x4, 0x7C, 0x80C81020, 1},
    {0x1, 0x07, 0x00, 1},
    {0x1, 0x0F, 0x00, 1},
    {0x1, 0x17, 0x00, 1},
    {0x1, 0x1F, 0x00, 1},
    {0x1, 0x27, 0x00, 1},
    {0x1, 0x2F, 0x00, 1},
    {0x1, 0x37, 0x00, 1},
    {0x2, 0x3F, 0x0000, 1},
    {0x1, 0x47, 0x00, 1},
    {0x1, 0x52, 0x00, 1},
    {0x1, 0x64, 0x00, 1},
    {0x1, 0x76, 0x00, 1},
    {0x4, 0x7C, 0x00C91020, 1},
    {0x1, 0x10, 0x00, 1},
    {0x1, 0x22, 0x00, 1},
    {0x1, 0x34, 0x00, 1},
    {0x1, 0x46, 0x00, 1},
    {0x1, 0x58, 0x00, 1},
    {0x1, 0x6A, 0x00, 1},
    {0x4, 0x7C, 0x80C91020, 1},
    {0x1, 0x10, 0x00, 1},
    {0x1, 0x22, 0x00, 1},
    {0x1, 0x34, 0x00, 1},
    {0x1, 0x46, 0x00, 1},
    {0x1, 0x58, 0x00, 1},
    {0x1, 0x6A, 0x00, 1},
    {0x4, 0x7C, 0x00CA1020, 1},
    {0x1, 0x10, 0x00, 1},
    {0x6, 0x12, 0x00000000461E, 1},
    {0x3, 0x1B, 0x004120, 1},
    {0x6, 0x22, 0x00003E000000, 1},
    {0x3, 0x2B, 0x004120, 1},
    {0x5, 0x33, 0x0004000000, 1},
    {0x3, 0x3B, 0x004120, 1},
    {0x5, 0x43, 0x0024F40000, 1},
    {0x3, 0x4B, 0x004120, 1},
    {0x5, 0x53, 0x0004000000, 1},
    {0x3, 0x5B, 0x004120, 1},
    {0x5, 0x63, 0x0005000000, 1},
    {0x3, 0x6B, 0x004120, 1},
    {0x1, 0x73, 0x00, 1},
    {0x4, 0x7C, 0x80CA1020, 1},
    {0x4, 0x00, 0xF5000000, 1},
    {0x3, 0x07, 0x004120, 1},
    {0x2, 0x0F, 0x0000, 1},
    {0x1, 0x13, 0x00, 1},
    {0x3, 0x17, 0x000000, 1},
    {0x1, 0x1F, 0x00, 1},
    {0x2, 0x22, 0x0000, 1},
    {0x3, 0x27, 0x000000, 1},
    {0x1, 0x2F, 0x00, 1},
    {0x2, 0x33, 0x0000, 1},
    {0x3, 0x37, 0x000000, 1},
    {0x1, 0x3F, 0x00, 1},
    {0x1, 0x43, 0x00, 1},
    {0x4, 0x46, 0x00000000, 1},
    {0x1, 0x4F, 0x00, 1},
    {0x1, 0x53, 0x00, 1},
    {0x3, 0x57, 0x000000, 1},
    {0x1, 0x5F, 0x00, 1},
    {0x1, 0x68, 0x00, 1},
    {0x4, 0x7C, 0x00CB1020, 1},
    {0x1, 0x04, 0x00, 1},
    {0x1, 0x0C, 0x00, 1},
    {0x1, 0x14, 0x00, 1},
    {0x1, 0x1C, 0x00, 1},
    {0x1, 0x24, 0x00, 1},
    {0x1, 0x2C, 0x00, 1},
    {0x1, 0x34, 0x00, 1},
    {0x1, 0x3C, 0x00, 1},
    {0x1, 0x45, 0x00, 1},
    {0x1, 0x49, 0x00, 1},
    {0x1, 0x4D, 0x00, 1},
    {0x1, 0x53, 0x00, 1},
    {0x1, 0x55, 0x00, 1},
    {0x1, 0x5D, 0x00, 1},
    {0x1, 0x65, 0x00, 1},
    {0x1, 0x6D, 0x00, 1},
    {0x1, 0x71, 0x00, 1},
    {0x1, 0x75, 0x00, 1},
    {0x4, 0x7C, 0x80CB1020, 1},
    {0x1, 0x05, 0x00, 1},
    {0x1, 0x09, 0x00, 1},
    {0x1, 0x0D, 0x00, 1},
    {0x1, 0x13, 0x00, 1},
    {0x1, 0x15, 0x00, 1},
    {0x1, 0x1D, 0x00, 1},
    {0x1, 0x25, 0x00, 1},
    {0x1, 0x2D, 0x00, 1},
    {0x1, 0x31, 0x00, 1},
    {0x1, 0x35, 0x00, 1},
    {0x1, 0x3B, 0x00, 1},
    {0x1, 0x3D, 0x00, 1},
    {0x1, 0x45, 0x00, 1},
    {0x2, 0x4B, 0x0000, 1},
    {0x1, 0x4E, 0x00, 1},
    {0x1, 0x50, 0x00, 1},
    {0x1, 0x52, 0x00, 1},
    {0x4, 0x7C, 0x00CC1020, 1},
    {0x1, 0x0F, 0x00, 1},
    {0x1, 0x1F, 0x00, 1},
    {0x1, 0x2F, 0x00, 1},
    {0x1, 0x3F, 0x00, 1},
    {0x1, 0x4E, 0x00, 1},
    {0x1, 0x5E, 0x00, 1},
    {0x1, 0x6E, 0x00, 1},
    {0x4, 0x7C, 0x80CC1020},
    {0x1, 0x0E, 0x00, 1},
    {0x1, 0x1E, 0x00, 1},
    {0x1, 0x2E, 0x00, 1},
    {0x1, 0x3E, 0x00, 1},
    {0x1, 0x4E, 0x00, 1},
    {0x1, 0x54, 0x00, 1},
    {0x4, 0x7C, 0x00CD1020, 1},
    {0x1, 0x06, 0x00, 1}, 
    {0x1, 0x0E, 0x00, 1},
    {0x1, 0x16, 0x00, 1},
    {0x1, 0x1E, 0x00, 1},
    {0x1, 0x25, 0x00, 1},
    {0x4, 0x7C, 0x80CD1020, 1},
    {0x1, 0x02, 0x00, 1},
    {0x1, 0x04, 0x00, 1},
    {0x1, 0x06, 0x00, 1},
    {0x1, 0x0A, 0x00, 1},
    {0x1, 0x0C, 0x00, 1},
    {0x1, 0x0E, 0x00, 1},
    {0x1, 0x12, 0x00, 1},
    {0x1, 0x14, 0x00, 1},
    {0x1, 0x16, 0x00, 1},
    {0x1, 0x1A, 0x00, 1},
    {0x1, 0x1C, 0x00, 1},
    {0x1, 0x1E, 0x00, 1},
    {0x4, 0x7C, 0x00CE1020, 1},
    {0x1, 0x04, 0x00, 1},
    {0x1, 0x0A, 0x00, 1},
    {0x1, 0x0C, 0x00, 1},
    {0x1, 0x10, 0x00, 1},
    {0x1, 0x14, 0x00, 1},
    {0x1, 0x16, 0x00, 1},
    {0x1, 0x1C, 0x00, 1},
    {0x1, 0x22, 0x00, 1},
    {0x1, 0x24, 0x00, 1},
    {0x1, 0x28, 0x00, 1},
    {0x1, 0x2C, 0x00, 1},
    {0x1, 0x2E, 0x00, 1},
    {0x1, 0x34, 0x00, 1},
    {0x1, 0x3A, 0x00, 1},
    {0x1, 0x40, 0x00, 1},
    {0x1, 0x44, 0x00, 1},
    {0x1, 0x46, 0x00, 1},
    {0x1, 0x4C, 0x00, 1},
    {0x1, 0x52, 0x00, 1},
    {0x1, 0x58, 0x00, 1},
    {0x1, 0x5E, 0x00, 1},
    {0x4, 0x7C, 0x00CF1020, 1},
    {0x1, 0x4A, 0x05, 1},
    {0x1, 0x4E, 0x77, 1},
    {0x1, 0x5B, 0x00, 1},
    {0x1, 0x5F, 0x00, 1},
    {0x1, 0x67, 0x00, 1},
    {0x1, 0x6D, 0x00, 1},
};

static void transfer(int fd, uint8_t const *tx, uint8_t const *rx, size_t len)
{
    int ret;

    struct spi_ioc_transfer tr = {
        .tx_buf = (unsigned long)tx,
        .rx_buf = (unsigned long)rx,
        .len = len,
        .delay_usecs = delay,
        .speed_hz = speed,
        .bits_per_word = bits,
    };

    ret = ioctl(fd, SPI_IOC_MESSAGE(1), &tr);
    if (ret < 1)
        printf("can't send spi message\n");
}

/*************
 * 初始化idt8a34002
**************/
static int idt8a34002_init(void)
{
    int fd, ret = 0;
    char *device = "/dev/spidev0.0";

    fd = open(device, O_RDWR);
    if (fd < 0)
        pabort("can't open device");

    ret = ioctl(fd, SPI_IOC_WR_MODE32, &mode);
    if (ret == -1)
        pabort("can't set spi mode");

    ret = ioctl(fd, SPI_IOC_RD_MODE32, &mode);
    if (ret == -1)
        pabort("can't get spi mode");

    ret = ioctl(fd, SPI_IOC_WR_BITS_PER_WORD, &bits);
    if (ret == -1)
        pabort("can't set bits per word");

    ret = ioctl(fd, SPI_IOC_RD_BITS_PER_WORD, &bits);
    if (ret == -1)
        pabort("can't get bits per word");

    ret = ioctl(fd, SPI_IOC_WR_MAX_SPEED_HZ, &speed);
    if (ret == -1)
        pabort("can't set max speed hz");

    ret = ioctl(fd, SPI_IOC_RD_MAX_SPEED_HZ, &speed);
    if (ret == -1)
        pabort("can't get max speed hz");

#if 0
    printf("open:%s\n", device);
    printf("cpld:spi mode: 0x%x\n", mode);
    printf("cpld:bits per word: %d\n", bits);
    printf("cpld:max speed: %d Hz (%d KHz)\n", speed, speed/1000);
#endif

    return fd;
}

static int init_spi_t8a34002(void)      //时钟芯片t8a34002初始化
{
    int array_size = 0;
    int value_size = 0, last_size = 0;
    int fd;
    int pos = 0, size = 0;
    fd = idt8a34002_init();

    array_size = sizeof(spi_t8a34002_reg_value) / sizeof(spi_t8a34002_reg_t);
    printf("IDT8a34002 reg size is %d\n", array_size);
    spi_t8a34002_reg_t* p = spi_t8a34002_reg_value;

    for (pos = 0; pos < array_size; pos++) {
        if (p->reg_flag) {
            printf("********************************\n");
            reg_addr_value[last_size] = p->reg_addr;
            for (size = 0; size < p->reg_size; size++) {
                value_size = p->reg_size + last_size - size;
                reg_addr_value[value_size] = (uint8_t)((p->reg_value >> (8*size)) & 0xff);
                printf("reg_addr_value[%d]=0x%x\n",  value_size, reg_addr_value[value_size]);
            }
            transfer(fd, reg_addr_value, NULL, p->reg_size + 1 +last_size);
            last_size = 0;
            printf("addr=0x%x value=0x%lx, size=0x%x\n", p->reg_addr, p->reg_value, p->reg_size);
        } else {
            printf("**************************************************\n");
            reg_addr_value[0] = p->reg_addr;
            for (size = 0; size < p->reg_size; size++) {
                value_size = p->reg_size - size;
                reg_addr_value[value_size] = (uint8_t)((p->reg_value >> (8*size)) & 0xff);
                printf("reg_addr_value[%d]=0x%x\n",  value_size, reg_addr_value[value_size]);
            }
            last_size = p->reg_size + 1;
            printf("addr=0x%x value=0x%lx, size=0x%x\n", p->reg_addr, p->reg_value, p->reg_size);
        }

        p++;
    }

    close(fd);
    return 0;
}

/*************
 * main 
**************/
int main(int argc, char *argv[])
{
    printf("spi_idt8a34002 by fish.\n");
    init_spi_t8a34002();

    return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你好!要配置SPI屏幕在Linux上工作,你需要进行以下步骤: 1. 确保SPI总线驱动已加载:在终端中运行以下命令,检查是否存在spi_bcm2835模块: ``` lsmod | grep spi_bcm2835 ``` 如果没有输出结果,可以通过运行以下命令加载驱动: ``` sudo modprobe spi_bcm2835 ``` 2. 连接SPI屏幕:将SPI屏幕与树莓派或其他支持SPI接口的设备连接。确保连接正确并稳定。 3. 配置设备树(Device Tree):在/boot目录下找到设备树文件(通常是以.dts或.dtb扩展名结尾的文件),使用文本编辑器打开。 4. 在设备树文件中添加SPI设备节点:找到与SPI总线相关的部分,并按照屏幕的规格和要求添加一个新的SPI设备节点。这可能涉及到设置时钟频率、传输模式、数据位宽等参数。具体的配置取决于你使用的屏幕型号和SPI驱动程序。 5. 保存并编译设备树文件:保存对设备树文件的修改,并使用适当的工具(如dtc)将其编译成设备树二进制文件(.dtbo)。 6. 加载设备树:将编译好的设备树二进制文件加载到内核中,使用以下命令: ``` sudo cp your_dtb_file.dtbo /boot/overlays/ sudo echo "dtoverlay=your_dtb_file" >> /boot/config.txt ``` 7. 重新启动系统:重新启动设备,使配置生效。 请注意,以上步骤中的具体操作可能因你使用的硬件和软件版本而有所不同。确保参考屏幕和设备的文档以获得准确的配置指南。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值