北方 发表于 2019-7-22 15:03

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

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

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

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

<p>程序启动设定spi,</p>

<p>&nbsp;&nbsp; &nbsp;SPIMasterModeSet(3);&nbsp;<br />
&nbsp;&nbsp; &nbsp;SPI_CK_SET(12);</p>

<p>然后直接加载</p>

<p>SCS = 0; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //SPI主机发送数据<br />
&nbsp;&nbsp; &nbsp;CH549SPIMasterWrite(i);&nbsp;</p>

<p>就可以写入SPI数据了。</p>

<p>4、代码扩展如下。</p>

<pre>
<code>#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
*******************************************************************************/

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


UINT16 ABS(UINT16 a,UINT16 b)
{
    if(a&gt;b)
    {
      return (a-b);
    }
    else
    {
      return (b-a);
    }
}

void LED_Port_Init(void)
{
    P2 |= (0xF&lt;&lt;2);                                                          //默认熄灭
    P2_MOD_OC &amp;= ~(0xF&lt;&lt;2);
    P2_DIR_PU |= (0xF&lt;&lt;2);
}

void LED_Control(UINT8 LEDx,UINT8 status)
{
    if(LEDx&gt;3)
    {
      return;
    }
    if(status)                                                                //点亮
    {
      P2 &amp;= ~(1&lt;&lt;(2+LEDx));
    }
    else                                                                      //熄灭
    {
      P2 |= (1&lt;&lt;(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 = TouchKeySelect( ch,CPW_Table );
      printf("%d ",PowerValue );
    }
    printf("\n");
        //SPI setting
        SPIMasterModeSet(3);
        SPI_CK_SET(12);
        SCS = 0;                                                               //SPI主机发送数据
        CH549SPIMasterWrite(i);
        mDelaymS(5);

    while(1)
    {
      CH549SPIMasterWrite(i);
                mDelaymS(5);
    }
}
</code></pre>

<p><br />
<br />
<b><font color="#5E7384">此内容由EEWORLD论坛网友<font size="3">北方</font>原创,如需转载或用于商业用途需征得作者同意并注明出处</font></b></p>
页: [1]
查看完整版本: 【沁恒试用】增加SPI的引用 #2