注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
myredback的个人空间 https://home.eeworld.com.cn/space-uid-166710.html [收藏] [复制] [分享] [RSS]
日志

Lm101_ssi.h

已有 1636 次阅读2010-7-29 16:54 |个人分类:LM3S101|

//这个是“ARM Corte-M3内核微控制器快速入门与应用”书中的一个作者总结的头文件,
 
//  为了提高朋友们的学习效率和缩短学习时间,而整理的一个SSI通信程序的头文件共使用,取名为:lm101_ssi.h  。这样就不用去考虑细节的问题,直接调用文件中的函数便可;
 
//下面是lm101_ssi.h文件的全部内容
#include "hw_memmap.h"
#include "hw_types.h"
#include "ssi.h"
#include "gpio.h"
#include "sysctl.h"
#include "systick.h"
#define BitRate     2400 //115200   // 设定波特率
#define DataWidth   8    // 设定数据宽度
// 此表为7段数码管显示0~F的字模
unsigned char DISP_TAB[16] = {
    0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
    0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
};
//-----------------------------------------------------------------------------
//下面是外用程序
//-----------------------------------------------------------------------------
// 函数名称:Lm101_Ssi_Initi(void)
// 函数功能:启用SSI通信模块
// 入口参数:无
// 输出参数:无。
//说明:连线时PA5为MOSI发送数据引脚, PA4为MISO接收数据引脚,PA3为/SS片选引脚,PA2为SCL时钏引脚
//-------------------------------------------------------------------------------
void Lm101_Ssi_Initi(void)
{
  
  // 使能 SSI 即启动外设SSI通信系统
  SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI);
  // 起用 GPIO PA 口 用以SSi同步串行输出
  SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
 
  // 配置 SSI SSI_FRF_MOTO_MODE_0设为SPI通信格式 设为主工作模式  115200  8位数据宽度
  SSIConfig(SSI_BASE, SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, BitRate, DataWidth);
 
  // 使能 SSI  起动SSI通信
  SSIEnable(SSI_BASE);
 
  // 设定 GPIO A 2~5 引脚为使用外设功能 GPIO_DIR_MODE_HW由硬件进行控制
  GPIODirModeSet(GPIO_PORTA_BASE, (GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 |
                 GPIO_PIN_5), GPIO_DIR_MODE_HW);
 
}
//-----------------------------------------------------------------------------
// 函数名称:Lm101_Ssi_NB_Send()
// 函数功能:一次发出多个字符
// 入口参数:lpchData[待发送的数据缓存区,可以用数组将数据传过来],nCount[待发送数据的个数]
// 输出参数:无。

//------------------------------------------------------------------------
void Lm101_Ssi_NB_Send(unsigned char *lpchData,unsigned int nCount)
{
    unsigned int i=0;
    for (i=0; i<nCount; i++)
    {
      // 循环输出 0~F 的字模
      SSIDataPut(SSI_BASE, lpchData[i]);
     
    }
}
//----------------------------------------------------------------------------
// 函数名称:Lm101_Ssi_Send()
// 函数功能:用于一次发出单个字符
// 入口参数:uchC[待发送的字符]
// 输出参数:无。

//---------------------------------------------------------------------------
void Lm101_Ssi_Send(unsigned char uchC)
{
      
      SSIDataPut(SSI_BASE, uchC);
 
}
//-----------------------------------------------------------------------------
// 函数名称:Lm101_Ssi_Rcv()
// 函数功能:用于用于读出一个字符[接收数据]
// 入口参数:无
// 输出参数:uchCb[读出的单个字符]

//----------------------------------------------------------------------------
unsigned char Lm101_Ssi_Rcv()
{
  unsigned char uchCb;
  unsigned long nlStr=0;
  SSIDataGet(SSI_BASE, &nlStr);
  uchCb=nlStr;
 
  return uchCb;
}  
//-----------------------------------------------------------------------------
 
 
//******************************************************************************
//下面是一个具体的ssi的例子
//SSI同步串行发送
//文件夹:LM101_SSI

//*********************************************************************************
#include "lm101_ssi.h"  // 上面提到的头文件;
#define PB4_LED  GPIO_PIN_4
#define PB5_LED  GPIO_PIN_5
#define PB6_LED  GPIO_PIN_6
//-----------------------------------------------------------------------------------------------------
//  防止JTAG失效
//----------------------------------------------------------------------------------------------------
void  jtagWait(void)
{
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);  
    //  设置KEY所在管脚为输入
    GPIODirModeSet(GPIO_PORTB_BASE, GPIO_PIN_3, GPIO_DIR_MODE_IN);
    //  如果复位时按下KEY,则进入
    if ( GPIOPinRead( GPIO_PORTB_BASE , GPIO_PIN_3)  ==  0x00 )       
    {
        for (;;);      //  死循环,以等待JTAG连接
    }
    //  禁止KEY所在的GPIO端口
    SysCtlPeripheralDisable(SYSCTL_PERIPH_GPIOB);    
}
//-----------------------------------------------------------------------------------
//延时子程序
//------------------------------------------------------------------------------------
void delay(int d)
{
  int i=0;
  for( ; d; --d)
   for(i=0;i<10000;i++); 
}
//----------------------------------------------------------------------------------
// 函数名称  GPio_Initi
// 函数功能  启动外设GPIO输入输出
// 输入参数  无。
// 输出参数  无。

//------------------------------------------------------------------------------------
void GPio_Initi(void)
{
    // 使能GPIO B口外设。用于指示灯
   SysCtlPeripheralEnable( SYSCTL_PERIPH_GPIOB );        
    //设定PB4 PB5为输出用做指示灯点亮
   GPIODirModeSet(GPIO_PORTB_BASE, PB4_LED | PB5_LED | PB6_LED,GPIO_DIR_MODE_OUT);
   //初始化PB4 PB5为低电平点亮指示灯
   GPIOPinWrite( GPIO_PORTB_BASE, PB5_LED, 0 );    
  
   //设置PA口用作按键功能
 //  SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);  
   // 设置KEY所在管脚为输入(PA0~PA1)
 //  GPIODirModeSet(GPIO_PORTA_BASE, GPIO_PIN_0|GPIO_PIN_1, GPIO_DIR_MODE_IN);
  
  
}
//------------------------------------------------------------------------------------
int main()
{
    unsigned char nJsq=0,chS[3];
    //防止JTAG失效
    delay(10);
    jtagWait();
    delay(10);
    // 设定系统晶振为时钟源。
    SysCtlClockSet( SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
                  SYSCTL_XTAL_6MHZ );                 
                  
    GPio_Initi();  //起动GPIO输出
   
    Lm101_Ssi_Initi(); //起动串行发送子程序
    Lm101_Ssi_Send(0xA4);  //复位ZLG7289
 
    delay(100);    //
    
   while(1)
   {
    
      chS[0]=0x80;
      chS[1]=nJsq;
      Lm101_Ssi_NB_Send(chS,2);
      nJsq++;
      if(nJsq>9)nJsq=0;
    
     //程序运行指示灯处理
      if(GPIOPinRead(GPIO_PORTB_BASE, PB5_LED)==0x00)  //读出PB5_LED引脚值判断是否为0
         GPIOPinWrite(GPIO_PORTB_BASE, PB5_LED,0x20);  //如果PB5引脚为0就给其写1 熄灯
        else GPIOPinWrite(GPIO_PORTB_BASE, PB5_LED,0x00);  //就给写0 亮灯
      
      delay(30);
     
    } 
    
}
//--------------------------------------------------------------------------
发表评论 评论 (2 个评论)
回复 小志 2010-7-30 10:10
不错!
回复 nhaw 2012-4-22 15:09

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章