CH571f要對(duì)接一個(gè)外設(shè),通訊協(xié)議? 延時(shí)600us 這個(gè)怎么處理
/*******************************************************************************
?- 函數(shù)說(shuō)明:一線通數(shù)據(jù)發(fā)送【注意調(diào)試的時(shí)候,用示波器或者邏輯分析儀看一下脈沖寬度】
?- 隸屬模塊:內(nèi)部
?- 參數(shù)說(shuō)明:dat = 待發(fā)送的數(shù)據(jù)
?- 返回說(shuō)明:無(wú)
********************************************************************************/
?
#define IO1_HIGH() JL_PORTA->DIR &= ~BIT(6);JL_PORTA->OUT |=? BIT(6);
?
#define IO1_LOW() JL_PORTA->DIR &= ~BIT(6);JL_PORTA->OUT &= ~BIT(6);
?
?
?
void oneline_send_one_data(u8 dat)
?
{
?
? ? u8 i = 0 ;
?
? ? IO1_LOW() ;/*現(xiàn)將總線拉低*/
?
? ? udelay(5000) ;/*延時(shí)6MS --- 這里就是發(fā)起通訊的起始信號(hào)*/
?
? ? CPU_SR_ALLOC();//關(guān)中斷--芯片不同,可能接口不同
?
? ? OS_ENTER_CRITICAL();//關(guān)中斷
?
? ? for(i=0 ; i<8 ;i++){
?
? ? ? ? if(dat & 0x01){
?
? ? ? ? ? ? IO1_HIGH() ;
?
? ? ? ? ? ? udelay(500);/*延時(shí)600us*/
?
? ? ? ? ? ? IO1_LOW();
?
? ? ? ? ? ? udelay(170) ;/*延時(shí)200us*/
?
? ? ? ? }else{
?
? ? ? ? ? ? IO1_HIGH() ;
?
? ? ? ? ? ? udelay(170);/*延時(shí)200us*/
?
? ? ? ? ? ? IO1_LOW();
?
? ? ? ? ? ? udelay(500) ;/*延時(shí)600us*/
?
? ? ? ? }
?
? ? ? ? dat = dat >> 1 ;/*發(fā)送的時(shí)候,先發(fā)送最高位,再發(fā)送次高位,以此類推*/
?
? ? }
?
? ? IO1_HIGH() ;/*空閑時(shí)將該腳拉高即可*/
?
? ? OS_EXIT_CRITICAL();//開(kāi)中斷
?
? ? /*同時(shí)注意,芯片初始化的時(shí)候,請(qǐng)將信號(hào)腳拉高。*/
?
}