?? main.c
字號:
/****************************************Copyright (c)**************************************************
** Guangzou ZLG-MCU Development Co.,LTD.
** graduate school
** http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name: main.c
** Last modified Date: 2004-09-16
** Last Version: 1.0
** Descriptions: The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by: Litiantian
** Created date: 2007-01-04
** Version: 1.0
** Descriptions: SSP用作SPI主機,控制74HC595驅動流水燈
**
**------------------------------------------------------------------------------------------------------
** Modified by: xuxiaoqun
** Modified date: 2008-05-08
** Descriptions: 對代碼風格和注釋進行了調整、校對
**
********************************************************************************************************/
#include "config.h"
#define SSPCR1_SSE (1 << 1) // SSP使能
/*********************************************************************************************************
** 函數名稱:SSP_Init
** 函數功能:將SSP控制器設置為主機
** 入口參數:無
** 出口參數:無
**********************************************************************************************************/
void SSP_Init(void)
{
PCONP |= (1 << 21); // 在外設功率控制寄存器里使能SSP外設,默認情況下,該外設已被使能
#if 1
/* 初始化P0.16(SSEL0)、P0.15(SCK0)、P0.17(MISO0)、P0.18(MOSI0)為SSP接口引腳, */
/* 不用另外的IO口作從機選擇線,直接用SSEL0完成片選595的功能 */
PINSEL0 = ((PINSEL0 & 0x3FFFFFFF) | 0x80000000);
PINSEL1 = ((PINSEL1 & 0xFFFFFFC0) | 0xFFFFFF2A);
#else
/* 初始化P2.22(SCK0)、P2.23(SSEL0)、P2.26(MISO0)、P2.27(MOSI0)為SSP接口引腳, */
/* 不用另外的IO口作從機選擇線,直接用SSEL0完成片選595的功能 */
PINSEL5 |= (0x03 << 12) | (0x03 << 14) | (0x03 << 20) | (0x03 << 22);
#endif
/* 設置數據長度為8位,幀格式SPI,SCK高有效,第一個時鐘沿采樣,位速率為默認值 */
SSP0CR0 = 0x47;
SSP0CPSR = 0x02; // 設置SSP從PCLK獲得的分頻值,主模式下有效, 最小值為0x02
SSP0CR1 = SSPCR1_SSE; // 設置SSP為主機模式,不使用回寫模式,并使能
SSP0CR1 |= (0x01 << 0); // LBM 使用回寫模式
}
/*********************************************************************************************************
* 函數名稱:SSP_SendData
* 函數功能:SSP接口向SSP總線發送數據
* 入口參數:data 待發送的數據
* 出口參數:返回值為讀取的數據
*********************************************************************************************************/
uint16 SSP_SendData(uint8 data)
{
while ((SSP0SR & 0x02) == 0); // 等待發送FIFO留出空間
SSP0DR = data;
while ((SSP0SR & 0x10) == 0x10); // 等待數據幀發送完畢
return (SSP0DR);
}
/********************************************************************************************************
** 函數名稱:DelayNS
** 函數功能:長軟件延時
** 入口參數:dly 延時參數,值越大,延時越久
** 出口參數:無
********************************************************************************************************/
void DelayNS(uint32 dly)
{
uint32 i = 0;
for (; dly > 0; dly--)
{
for (i = 0; i < 50000; i++);
}
}
volatile uint32 RcvDat = 0;
/* 流水燈花樣,低電平點亮,注意調用時候用了取反操作 */
const uint32 LED_TBL[] =
{
0x00, 0xFF, // 全部熄滅后,再全部點亮
0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, // 依次逐個點亮
0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF, // 依次逐個疊加
0xFF, 0x7F, 0x3F, 0x1F, 0x0F, 0x07, 0x03, 0x01, // 依次逐個遞減
0x81, 0x42, 0x24, 0x18, 0x18, 0x24, 0x42, 0x81, // 兩個靠攏后分開
0x81, 0xC3, 0xE7, 0xFF, 0xFF, 0xE7, 0xC3, 0x81 // 從兩邊疊加后遞減
};
/********************************************************************************************************
** 函數名稱:main
** 函數功能:使用硬件SSP0,74HC595驅動控制8盞LED動態顯示
** 入口參數:無
** 出口參數:無
** 調試說明:需將JP1上的/CS,MOSI,SCLK,MISO分別和P2.23、P2.27、P2.22、P2.26
或P0.16、P0.18、P0.15、P0.17短接,取決于引腳初始化時的選擇。
********************************************************************************************************/
int main(void)
{
uint32 i = 0;
SSP_Init(); // 初始化SSP接口
while (1)
{
for (i = 0; i < 42; i++)
{
DelayNS(20); // 延時,控制顯示時間
RcvDat = SSP_SendData(LED_TBL[i]); // 發送顯示數據
}
}
return (0);
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -