📄 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: Lizhongsheng
** Created date: 2007-7-6
** Version: 1.0
** Descriptions: EMCTest
**
**------------------------------------------------------------------------------------------------------
** Modified by: yangshiping
** Modified date: 2007-09-03
** Version:
** Descriptions: 对代码风格和注释进行校对、修改
**
** Rechecked by : Litiantian
********************************************************************************************************/
#include "config.h"
#define CS1ADDR0BUF1 (*(volatile unsigned char *)(0x80004000))
#define CS1ADDR0BUF2 (*(volatile unsigned short *)(0x80004000))
#define CS1ADDR0BUF3 (*(volatile unsigned long *)(0x80004000))
/******************************************************************************************
** 函数名称: DMA_Init
** 函数功能: DMA 通道0初始化函数(存储器到存储器)。
** 入口参数: Src_Address 源地址
** Dest_Address 目的地址
** DMA_Size DMA传输大小
*******************************************************************************************/
uint8 DMA_Init( uint32 *Src_Address, // 源地址
uint32 *Dest_Address, // 目的地址
uint32 DMA_Size // DMA传输大小
)
{
PCONP |= (1 << 29); // 使能GPDMA时钟
DMACIntTCClear = 0x01; // 清除终端计数中断标志
DMACIntErrClr = 0x01; // 清除错误中断标志
DMACC0SrcAddr = (uint32)Src_Address; // 设置存储区源地址
DMACC0DestAddr = (uint32)Dest_Address; // 设置存储区目标地址
DMACC0LLI = 0; // 下一个链表项无效
/*存储器到存储器传输时,突发大小为32位,源地址自增,目的地址自增 */
DMACC0Control = ((DMA_Size/4) & 0x0FFF) // 传输大小为突发传输的次数
| (0x04 << 12) | (0x04 << 15) // 源突发和目标突发的大小为32位
| (0x02 << 18) | (0x02 << 21) // 源和目标的数据传输宽度为1个字(32位)
| (1 << 26) | (1 << 27) // 源地址和目标地址自增
| 0x80000000; // 终端计数中断使能
DMACConfiguration = 0x01; // 使能DMA,使用小端模式
DMACC0Configuration |= 0x01; // 使能通道0
// while((DMACIntTCStatus & 0x01) == 0); // 等待通道0的传输完毕
return 0;
}
#define ADDR16 28
void EMCInit(void)
{
uint32 tmp;
SCS |= 0x01;
PCONP = PCONP | 0x00000800; //打开EMC控制器
EMCControl = 0x00000001;
PINSEL6 = 0x00005555; // D0--D7脚
PINSEL8 = 0x55555555; // A0--A15脚
/*设置nOE, nWE, nCS0, nCS1脚*/
tmp = PINSEL9;
tmp &= 0x0FF0FFFF;
PINSEL9 = tmp|0x50090000;
//设置ADDR16脚,选择低64K
tmp = ~(3<<24);
PINSEL3 = tmp&PINSEL3;
FIO1DIR = FIO1DIR|ADDR16;
FIO1CLR = ADDR16;
/*设置Bank0的时序*/
EMCStaticConfig0 = 0x0;
EMCStaticWaitWen0 = 0x0;
EMCStaticWaitOen0 = 0x0;
EMCStaticWaitRd0 = 0x1f;
EMCStaticWaitPage0 = 0x0;
EMCStaticWaitWr0 = 0x1f;
EMCStaticWaitTurn0 = 0x0;
/*设置Bank1的时序*/
EMCStaticConfig1 = 0x0;
EMCStaticWaitWen1 = 0x0;
EMCStaticWaitOen1 = 0x0;
EMCStaticWaitRd1 = 0x1f;
EMCStaticWaitPage1 = 0x0;
EMCStaticWaitWr1 = 0x1f;
EMCStaticExtendedWait = 0x0;
EMCStaticWaitTurn1 = 0x0F;
}
int main (void)
{
uint8 *pch;
uint32 *pSrc; // 源地址
uint32 *pAddress; // 目的地址
uint32 Size;
uint32 x;
pSrc = (uint32 *)0x7FD00000; //通用SRAM
pAddress = (uint32 *)(0x80000000+4); //外部存储器
//初始化EMC
EMCInit();
pch = (uint8 *)0x80000000;
for(x= 0;x<1024;x++)
{
*pch = x;
pch ++;
}
pSrc =(uint32 *)0x7FD00000;
Size = 1024;
//通用SRAM(0x7fd00000-0x7fd01000)的内容复制到外部存储器
DMA_Init(pSrc,pAddress,Size);
pSrc+=1024;
//外部存储器(0x80000000-0x80001000)的内容复制到通用SRAM的0x7fd01000开始的地址处
DMA_Init(pAddress,pSrc,Size);
while(1)
{
}
return 0;
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -