📄 spiisr.c
字号:
Void init_mcu_port (void)
{
// SPI port: P0.4=SCK0, P0.5=MISO0, P0.6=MOSI0, P0.7=SSEL0
PINSEL0 |= 0x20001500; // set SCK0, MISO0, SSEL0, EINT1
// Bit 29:28 = p0.14 => 10=EINT1
// Bit 15:8 = p0.4-7 => SPIO0 (SCLK, MISO, MOSI)
VICIntSelect |= 0x00008000; // enable a VIC Channel as FIQ
VICIntEnable |= 0x00008000; // enable EINT1
// Bit 17-14 = EINT3-0
VICDefVectAddr = (unsigned long) DefaultIRQ; // set Default interrupt vector
// GPIO direction
IO0DIR |= 0x000000D0; // set SCK0, MOSI0, SSEL0 as output and MISO0 as input
// Bit 29:28 = p0.14 (set EINT1 as input)
// Bit 15:8 = p0.7-4 (SSEL0, MOS10, MISO0, SCK0)
// GPIO setting
IO0SET |= 0x00000080; // set p0.7 (SSEL0) to high (disable SPI slave chip select)
// Control the rate of the APB clock in relation to the processor clock
VPBDIV = 0x1; // set APB clock to same as processor clock
// SPI Clock Counter Register to control the frequency of master抯 clock
S0SPCCR = 0x6; // set SCLK (SPI clock)
// SPI Control Register to control the SPI operation
S0SPCR = 0x20; // set SPI mode 0 (CPHA=0, CPOL=0), master mode, MSB first
// set SPI interrupt enabled, 8 bits of SPI data per transfer
}
Void SC16IS752_Init_ChA (void) // program channel A for SPI-UART
{ // set 115200 baud, 8N1
SPI_wr_752 (LCR, 0x80, 0); // 0x80 to program baud rate
SPI_wr_752 (DLL, 0x08, 0); // 0x08 = 115.2K with X1 = 14.7456 MHz
SPI_wr_752 (DLM, 0x00, 0); // divisor = 0x0008 for 115200 bps
SPI_wr_752 (LCR, 0xBF, 0); // access EFR register
SPI_wr_752 (EFR, 0X10, 0); // enable enhanced registers
SPI_wr_752 (LCR,0x03, 0); // 8 data bit, 1 stop bit, no parity
//SPI_wr_752 (FCR, 0x01, 0); // enable FIFO mode
/SPI_wr_752 (IODIR, 0xFF, 0); // set GPIO [7:0] to output
// (default: 0x00=input)
SPI_wr_752 (IOSTATE, 0x00, 0); // set GPIO [7:0] to 0x00 (LEDs on)
SPI_wr_752 (IER, 0x01, 0); // enable Rx data ready interrupt
}
Void SC16IS752_Init_ChB (void) // program channel B for SPI-IrDA
{
SPI_wr_752 (LCR, 0x80, 2); // 0x80 to access program baud rate
SPI_wr_752 (DLL, 0x80, 2); // set IRDA to 2400 bps divider 0x0180
SPI_wr_752 (DLM, 0x01, 2); // program baud rate high byte
SPI_wr_752 (LCR, 0XBF, 2); // access EFR
SPI_wr_752 (EFR, 0X10, 2); // enable enhanced registers
SPI_wr_752 (LCR, 0x03, 2); // 8 data bit, 1 stop bit, no parity
SPI_wr_752 (FCR, 0x01, 2); // enable FIFO mode
SPI_wr_752 (SPR, 'B', 2); // scratch pad = character B (0x42)
SPI_wr_752 (EFCR, 0x00, 2); // IrDA SIR 115.2 Kbps
SPI_wr_752 (MCR, 0x40, 2); // enable IRDA mode
SPI_wr_752 (IER, 0x01, 2); // enable receive interrupt
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -