101 usleep( 1000000 / 16 );
104 usleep( 1000000 / 16 );
132 char *filename =
"/dev/spidev32766.0";
134 MY_DEBUG(
"use spi driver = %s\r\n", filename);
136 lcd_spi_file = open(filename,O_RDWR);
137 if (lcd_spi_file > 0){
138 uint8_t mode, lsb, bits;
139 uint32_t speed=2500000, max_speed;
141 if (ioctl(lcd_spi_file, SPI_IOC_RD_MODE, &mode) < 0)
146 if (ioctl(lcd_spi_file, SPI_IOC_RD_LSB_FIRST, &lsb) < 0)
151 if (ioctl(lcd_spi_file, SPI_IOC_RD_BITS_PER_WORD, &bits) < 0)
156 if (ioctl(lcd_spi_file, SPI_IOC_RD_MAX_SPEED_HZ, &max_speed) < 0)
161 MY_DEBUG(
"%s: spi mode %d, %d bits %sper word, %d Hz max\n",filename, mode, bits, lsb ?
"(lsb first) " :
"", max_speed);
164 spi_xfer.cs_change = 0;
165 spi_xfer.delay_usecs = 0;
166 spi_xfer.speed_hz = (speed > max_speed)?max_speed: speed;
167 spi_xfer.bits_per_word = bits;
169 MY_DEBUG(
"failed to open file = %s(lcd_spi_file=%d)\r\n", filename, lcd_spi_file);
174 usleep( 1000000 / 16 );
176 MY_DEBUG(
"[SPIM0]enable SPIM0 interface\r\n");
178 alt_clrbits_word( (
virtual_base + ( ( uint32_t )( ALT_RSTMGR_PERMODRST_ADDR ) & ( uint32_t )(
HW_REGS_MASK ) ) ), ALT_RSTMGR_PERMODRST_SPIM0_SET_MSK );
185 MY_DEBUG(
"[SPIM0]SPIM0.spi_en = 0 # disable the SPI master\r\n");
187 alt_clrbits_word( (
virtual_base + ( ( uint32_t )( ALT_SPIM0_SPIENR_ADDR ) & ( uint32_t )(
HW_REGS_MASK ) ) ), ALT_SPIM_SPIENR_SPI_EN_SET_MSK );
199 MY_DEBUG(
"[SPIM0]SPIM0_ctrlr0.tmod = 1 # TX only mode\r\n");
200 alt_clrbits_word( (
virtual_base + ( ( uint32_t )( ALT_SPIM0_CTLR0_ADDR ) & ( uint32_t )(
HW_REGS_MASK ) ) ), ALT_SPIM_CTLR0_TMOD_SET_MSK );
201 alt_setbits_word( (
virtual_base + ( ( uint32_t )( ALT_SPIM0_CTLR0_ADDR ) & ( uint32_t )(
HW_REGS_MASK ) ) ), ALT_SPIM_CTLR0_TMOD_SET( ALT_SPIM_CTLR0_TMOD_E_TXONLY ) );
205 MY_DEBUG(
"[SPIM0]SPIM0_baudr.sckdv = 64 # 200MHz / 64 = 3.125MHz\r\n");
206 alt_clrbits_word( (
virtual_base + ( ( uint32_t )( ALT_SPIM0_BAUDR_ADDR ) & ( uint32_t )(
HW_REGS_MASK ) ) ), ALT_SPIM_BAUDR_SCKDV_SET_MSK );
207 alt_setbits_word( (
virtual_base + ( ( uint32_t )( ALT_SPIM0_BAUDR_ADDR ) & ( uint32_t )(
HW_REGS_MASK ) ) ), ALT_SPIM_BAUDR_SCKDV_SET( 64 ) );
212 MY_DEBUG(
"[SPIM0]SPIM0_ser.ser = 1 #ss_n0 = 1\r\n");
213 alt_clrbits_word( (
virtual_base + ( ( uint32_t )( ALT_SPIM0_SER_ADDR ) & ( uint32_t )(
HW_REGS_MASK ) ) ), ALT_SPIM_SER_SER_SET_MSK );
214 alt_setbits_word( (
virtual_base + ( ( uint32_t )( ALT_SPIM0_SER_ADDR ) & ( uint32_t )(
HW_REGS_MASK ) ) ), ALT_SPIM_SER_SER_SET( 1 ) );
221 MY_DEBUG(
"[SPIM0]spim0_spienr.spi_en = 1 # ensable the SPI master\r\n");
222 alt_setbits_word( (
virtual_base + ( ( uint32_t )( ALT_SPIM0_SPIENR_ADDR ) & ( uint32_t )(
HW_REGS_MASK ) ) ), ALT_SPIM_SPIENR_SPI_EN_SET_MSK );
229 MY_DEBUG(
"[SPIM0]LCD_Init done\r\n");
313 if (lcd_spi_file > 0)
314 spi_write8(lcd_spi_file, Data);
316 while( ALT_SPIM_SR_TFE_GET( alt_read_word( ( lcd_virtual_base + ( ( uint32_t )( ALT_SPIM0_SR_ADDR ) & ( uint32_t )(
HW_REGS_MASK ) ) ) ) ) != ALT_SPIM_SR_TFE_E_EMPTY );
317 alt_write_word( ( lcd_virtual_base + ( ( uint32_t )( ALT_SPIM0_DR_ADDR ) & ( uint32_t )(
HW_REGS_MASK ) ) ), ALT_SPIM_DR_DR_SET( Data ) );
318 while( ALT_SPIM_SR_TFE_GET( alt_read_word( ( lcd_virtual_base + ( ( uint32_t )( ALT_SPIM0_SR_ADDR ) & ( uint32_t )(
HW_REGS_MASK ) ) ) ) ) != ALT_SPIM_SR_TFE_E_EMPTY );
319 while( ALT_SPIM_SR_BUSY_GET( alt_read_word( ( lcd_virtual_base + ( ( uint32_t )( ALT_SPIM0_SR_ADDR ) & ( uint32_t )(
HW_REGS_MASK ) ) ) ) ) != ALT_SPIM_SR_BUSY_E_INACT );