27,375
社区成员
发帖
与我相关
我的任务
分享
void DM9051_Configuration(void)
{
/* Enable SPI1 peripheral clock */
CLK_EnableModuleClock(SPI1_MODULE);
/* Select HCLK as the clock source of SPI1 */
CLK_SetModuleClock(SPI1_MODULE, CLK_CLKSEL1_SPI1_S_HCLK, MODULE_NoMsk);
/* Reset IP */
SYS_ResetModule(SPI1_RST);
/* Setup SPI1 multi-function pins */
SYS->P0_MFP = SYS_MFP_P04_SPISS1 | SYS_MFP_P05_MOSI_1 | SYS_MFP_P06_MISO_1 | SYS_MFP_P07_SPICLK1;
/*---------------------------------------------------------------------------------------------------------*/
/* Init SPI */
/*---------------------------------------------------------------------------------------------------------*/
/* Configure SPI1 as a master, SPI clock rate 25MHz,
clock idle low, 32-bit transaction, drive output on falling clock edge and latch input on rising edge. */
SPI_Open(SPI1, SPI_MASTER, SPI_MODE_0, 8, 25000000);
/* Disable the automatic hardware slave selection function. Select the SPI1_SS pin and configure as low-active. */
SPI_DisableAutoSS(SPI1);
SPI_EnableFIFO(SPI1, 3, 3);
}
/*------------------------------------------------------*/
/* DM9051_Read_Reg() */
/* SPI read command: bit7 = 0, */
/* bit[6:0] = Reg. offset addr */
/* Disable auto SPI slave chip select. */
/*------------------------------------------------------*/
uint8_t DM9051_Read_Reg(uint8_t Reg_Off)
{
SPI_SET_SS_LOW(SPI1);
/* SPI transfer DM9051 Read-Command and Reg. offset. */
//SPI_WRITE_TX0(SPI1, (uint32_t)Reg_Off); //Read command + Register offset address
while(SPI_GET_TX_FIFO_FULL_FLAG(SPI1));
SPI_WRITE_TX0(SPI1, Reg_Off); //Read command + Register offset address
while(SPI_IS_BUSY(SPI1));
SPI_WRITE_TX0(SPI1, 0x0); //Dummy for read register value.
while(SPI_IS_BUSY(SPI1));
SPI_READ_RX0(SPI1); // dummy read, jump 1st byte.
SPI_SET_SS_HIGH(SPI1);
return (SPI_READ_RX0(SPI1) & 0xFF);
}
/*------------------------------------------------------*/
/* DM9051_Write_Reg() */
/* SPI write command: bit7 = 1, */
/* bit[6:0] = Reg. offset addr */
/* Disable auto SPI slave chip select. */
/*------------------------------------------------------*/
void DM9051_Write_Reg(uint8_t Reg_Off, uint8_t spi_data)
{
uint32_t cmdaddr;
cmdaddr = (Reg_Off | 0x80);
SPI_SET_SS_LOW(SPI1);
/* SPI transfer DM9051 Read-Command and Reg. offset. */
SPI_WRITE_TX0(SPI1, cmdaddr); //Read command + Register offset address
while(SPI_IS_BUSY(SPI1));
SPI_WRITE_TX0(SPI1, (uint32_t)spi_data);
while(SPI_IS_BUSY(SPI1));
/*Clear SPI TX FIFO*/
SPI_ClearRxFIFO(SPI1);
SPI_SET_SS_HIGH(SPI1);
return;
}
/*------------------------------------------------------*/
/* DM9051_Read_Mem() */
/* */
/* DM9051 burst read command: SPI_RD_BURST = 0x72 */
/* Disable auto SPI slave chip select. */
/*------------------------------------------------------*/
void DM9051_Read_Mem(uint8_t* pu8data, uint32_t datalen)
{
uint32_t i;
// Read SPI_Data_Array back from the slave
uint8_t burstcmd = SPI_RD_BURST;
SPI_SET_SS_LOW(SPI1);
SPI_WRITE_TX0(SPI1, (uint32_t)burstcmd);
while(SPI_IS_BUSY(SPI1));
SPI_READ_RX0(SPI1);
for(i = 0 ; i < datalen; i++){
pu8data[i] = SPI_WRITE_TX0(SPI1, (uint32_t )0x0);
while(SPI_GET_RX_FIFO_EMPTY_FLAG(SPI1));
pu8data[i] = (uint8_t)SPI_READ_RX0(SPI1);
}
while(SPI_IS_BUSY(SPI1));
/*Clear SPI TX FIFO*/
SPI_ClearTxFIFO(SPI1);
SPI_SET_SS_HIGH(SPI1);
}
/*------------------------------------------------------*/
/* DM9051_Write_Mem() */
/* */
/* DM9051 burst write command: SPI_WR_BURST = 0xF8 */
/* Disable auto SPI slave chip select. */
/*------------------------------------------------------*/
void DM9051_Write_Mem(uint8_t* pu8data, uint32_t datalen)
{
uint32_t i;
uint8_t burstcmd = SPI_WR_BURST; /* Send the array to the slave*/
SPI_SET_SS_LOW(SPI1);
SPI_WRITE_TX0(SPI1, (uint32_t)burstcmd);
while(SPI_IS_BUSY(SPI1));
SPI_READ_RX0(SPI1);
for(i = 0; i < datalen; i++){
while(SPI_GET_TX_FIFO_FULL_FLAG(SPI1));
SPI_WRITE_TX0(SPI1, (uint32_t)pu8data[i]);
}
while(SPI_IS_BUSY(SPI1));
/*Clear SPI RX FIFO*/
SPI_ClearRxFIFO(SPI1);
SPI_SET_SS_HIGH(SPI1);
}
static PT_THREAD(handle_input(struct httpd_state *s))
{
PSOCK_BEGIN(&s->sin);
PSOCK_READTO(&s->sin, ISO_space);
if(strncmp(s->inputbuf, http_get, 4) != 0) {
PSOCK_CLOSE_EXIT(&s->sin);
}
PSOCK_READTO(&s->sin, ISO_space);
if(s->inputbuf[0] != ISO_slash) {
PSOCK_CLOSE_EXIT(&s->sin);
}
if(s->inputbuf[1] == ISO_space) {
//strncpy(s->filename, http_index_html, sizeof(s->filename));
strncpy(s->filename, http_webMain_html, sizeof(s->filename));
}
#if 1 //web control led
/* Control led, 0 = OFF, 1 = ON, 2 = Flash */
else if (s->inputbuf[3] == 'L','E','D' && ((s->inputbuf[4] == '0') ||
(s->inputbuf[4] == '1') || (s->inputbuf[4] == '2'))){
Set_LED_mode(s->inputbuf[4]);
s->inputbuf[4]= 0;
//strncpy(s->filename, "/home.html", 10);
strncpy(s->filename, http_webMain_html, sizeof(s->filename));
}
#endif
else {
s->inputbuf[PSOCK_DATALEN(&s->sin) - 1] = 0;
strncpy(s->filename, &s->inputbuf[0], sizeof(s->filename));
}
/* httpd_log_file(uip_conn->ripaddr, s->filename);*/
s->state = STATE_OUTPUT;
while(1) {
PSOCK_READTO(&s->sin, ISO_nl);
if(strncmp(s->inputbuf, http_referer, 8) == 0) {
s->inputbuf[PSOCK_DATALEN(&s->sin) - 2] = 0;
/* httpd_log(&s->inputbuf[9]);*/
}
}
PSOCK_END(&s->sin);
}
void Set_LED_mode(char lkkcode)
{
//int i;
GPIO_SetMode(P3, BIT6, GPIO_PMD_OUTPUT);
if(lkkcode == ('0')) // LED off
{
P36 = 1;
}else if (lkkcode == '1'){ // LED on
P36 = 0;
}else if(lkkcode == '2') // LED Flash
{
//for(i = 0 ; i< 30 ; ++i)
{
P36 = 0;
Delay(25);
P36 = 1;
Delay(25);
}
}
}