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论坛网友北方原创,如需转载或用于商业用途需征得作者同意并注明出处