[MCU] 【沁恒试用】增加SPI的引用 #2

北方   2019-7-22 15:03 楼主

1、在完成基本框架构成设计之后,逐步增加系统增加系统资源的调用,这次增加SPI。

2、SPI需要4个引脚,这里使用的是SPI0,占用了

         CH549
         P1.4        =       SCS
         P1.5        =       MOSI
         P1.6        =       MISO
         P1.7        =       SCK
3、软件调用前需要引用spi.h头文件,并加载spi.c这样就可以调用spi,使用起来就很简单。

程序启动设定spi,

    SPIMasterModeSet(3); 
    SPI_CK_SET(12);

然后直接加载

SCS = 0;                                                               //SPI主机发送数据
    CH549SPIMasterWrite(i); 

就可以写入SPI数据了。

4、代码扩展如下。

#include ".\Public\CH549.H"
#include ".\Public\DEBUG.H"
#include ".\TouchKey\TouchKey.H"
#include ".\SPI\SPI.H"
/******************************************************************************
使用CH549 硬件SPI接口
         CH549
         P1.4        =       SCS
         P1.5        =       MOSI
         P1.6        =       MISO
         P1.7        =       SCK
*******************************************************************************/

#pragma  NOAREGS
UINT16 PowerValue[16];                                                         //保存触摸按键上电未触摸值
volatile UINT16 Press_Flag = 0;                                                //按下标志位
UINT8C CPW_Table[16] = { 30,30,30,30, 30,30,30,30,                             //与板间电容有关的参数,分别对应每个按键
                         30,30,30,30, 30,30,30,30,
                       };

 
UINT16 ABS(UINT16 a,UINT16 b)
{
    if(a>b)
    {
        return (a-b);
    }
    else
    {
        return (b-a);
    }
}
 
void LED_Port_Init(void)
{
    P2 |= (0xF<<2);                                                          //默认熄灭
    P2_MOD_OC &= ~(0xF<<2);
    P2_DIR_PU |= (0xF<<2);
}
 
void LED_Control(UINT8 LEDx,UINT8 status)
{
    if(LEDx>3)
    {
        return;
    }
    if(status)                                                                //点亮
    {
        P2 &= ~(1<<(2+LEDx));
    }
    else                                                                      //熄灭
    {
        P2 |= (1<<(2+LEDx));
    }
}
//主函数
void main()
{
    UINT8 ch;
    UINT16 value;
    UINT16 err;        
	UINT16 i=0;                                                          //触摸模拟变化差值
    CfgFsys( );                                                                //CH549时钟选择配置
    mDelaymS(20);
    mInitSTDIO( );                                                             //串口0初始化
    printf("TouchKey demo start ...\n");
    LED_Port_Init();
    TouchKey_Init();
    Press_Flag = 0;                                                            //无按键按下
    /* 获取按键初值 */
    for(ch = 8; ch!=12; ch++)
    {
        PowerValue[ch] = TouchKeySelect( ch,CPW_Table[ch] );
        printf("%d ",PowerValue[ch] );
    }
    printf("\n");
	//SPI setting
	SPIMasterModeSet(3); 
	SPI_CK_SET(12);
	SCS = 0;                                                               //SPI主机发送数据
	CH549SPIMasterWrite(i); 
	mDelaymS(5);

    while(1)
    {
        CH549SPIMasterWrite(i); 
		mDelaymS(5);
    }
}



此内容由EEWORLD论坛网友北方原创,如需转载或用于商业用途需征得作者同意并注明出处

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复