/*
-
@brief 设置波特率
-
@parm spi spi句柄
-
@parm baud 波特率
-
@return 0 成功,< 0 失败
*/
int spi_set_baud(spi_dev spi, u32 baud)
{
//SPICK = sysclk / (SPIx_BAUD + 1)
//=> SPIx_BAUD = sysclk / SPICK - 1
u8 id = spi_get_info_id(spi);
u32 sysclk;#define SYS_CLK_MAX (240000000L)
#define SPI_CLK_MAX (60000000L)
if(SYS_CLK_MAX>clk_get(“sys”)){
clk_set(“sys”,SYS_CLK_MAX);
}
// r_f_printf(“---------------------------%lu %lu”,clk_get(“spi”),clk_get(“sys”));
if(SPI_CLK_MAX>clk_get(“spi”)){
r_f_printf(“---------------------------%lu”,clk_get(“spi”));
clk_set(“spi”,SPI_CLK_MAX);
}
sysclk = clk_get("spi");
// log_debug("spi clock source freq %lu", sysclk);
if (sysclk < baud) {
spi_w_reg_baud(spi_regs[id], 0);
return -EINVAL;
}
spi_w_reg_baud(spi_regs[id], sysclk / baud - 1);
return 0;
}