本帖最后由 Swallow_0322 于 2011-6-25 15:30 编辑
本工程主要包含三个任务:①普通类任务task_LOOK_SPI_PDMA_t:等待标志Flag_SPI低四位任意位置位 然后完成来自于uart0的任务;
②中断类任务LOOK_SPI_PDMA_t:通过PDMA中断完成SPI的读写操作;
③中断类任务uart0_t:uart 同步输出功能及接收功能
初始化设置: 时钟配置为 XTL12M_EN: 外部 4~24MHz 晶振使能
CPU时钟频率为12MHz
PB.0选择多功能输入RXD0 PB.1选择多功能输入TXD0
UART时钟选择外部12MHZ,并使能UART0时钟
SPI1时钟使能
SPI的端口设置:PC.8~11 依次为MCLK、SPICLK1、MISO10、MOSI10
PB.9 TM1
主要完成功能: UART0 接收到字符‘R’或‘r’实现读取W25Q16BV Page0 的内容;
UART0 接收到字符‘U’或‘u’实现W25Q16BV Page0 的内容加1;
UART0 接收到字符‘D’或‘d’实现W25Q16BV Page0 的内容减1;
UART0 接收到字符‘M’或‘m’实现读取W25Q16BV制造商ID及设备ID。
源文件:
main.h-
- #ifndef __LOOK_MAIN_H
- #define __LOOK_MAIN_H
- /*------------------------------------
- LOOK头文件放入此处
- ------------------------------------*/
- #include "look_config.h"
- #include <look.h>
- #include <instantiate>
- /*------------------------------------
- 芯片及红杏头文件放入此处
- ------------------------------------*/
- #include "NUC1xx.h"
- #include "NUC1xxM051Seriescfg.h"
- /*------------------------------------
- 系统定义的C++语言的头文件应该放入此处
- ------------------------------------*/
- #include "LOOK_SPI_PDMA.h"
- #include "SPI_PDMA.h"
- #include "uart.h"
- /*------------------------------------
- 全局类对象实例声明放入此位置
- ------------------------------------*/
- #endif
SPI_PDMA.h- #ifndef __LOOK_SPI_H
- #define __LOOK_SPI_H
- #define Enable_SPI_CS GPIOAs.DOUT.Bits.Pin14 = 0
- #define DISABLE_SPI_CS GPIOAs.DOUT.Bits.Pin14 = 1
- // LOOK_SPI_PDMA_t 类为应用层提供了 SPI 接口
- class LOOK_SPI_PDMA_t : public interrupt_t {
- public:
- LOOK_SPI_PDMA_t() __OPT_ATTR__; //构造函数
- sem_t sem_pdma0; // 信号灯为PDMA0传输结束
- sem_t sem_pdma1; // 信号灯为PDMA1传输结束
- protected:
- bool isr(int vector); //中断服务例程
- void dsr(int vector, uintptr_t count); //中断滞后服务例程
- private://私有方法
- inline void SPI1_SingleWrite(uint32_t *pu32Data); //Write data to SPI bus and trigger SPI to start transfer.
- public://公有方法及属性
- uint32_t SPI_ReadMidDid(void);
- uint32_t SPI_ReadStatusReg1(void);
- void SPI_WaitReady(void);
- void SPI_ChipErase(void);
- void SPI_SectorErase(uint32_t StartAddress);
- void SPI_ReadData(uint32_t StartAddress);
- void SPI_PageProgram(uint32_t StartAddress);
- public://私有属性
- volatile uint8_t SrcArray[256], DestArray[256];//数据缓冲区
- };
- extern LOOK_SPI_PDMA_t SPI_PDMA;
- #endif
SPI_PDMA.CPP(对该文件内PDMA初始化部分内容的改进参见#9楼 HOT大叔指导并使用红杏头文件V1.20)
|