📄 miniisa.c
字号:
/****************************************Copyright (c)**************************************************
** Guangzou ZLG-MCU Development Co.,LTD.
** graduate school
** http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name:
** Last modified Date:
** Last Version: 1.0
** Descriptions: MiniISA基本操作函数
**
**------------------------------------------------------------------------------------------------------
** Created by:
** Created date:
** Version:
** Descriptions:
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
********************************************************************************************************/
#include "config.h"
/*
******************************************************************************************
** Function name: void MISARst(uint32 time)
** Descriptions: 复位MiniISA总线
** Input: 复位时间(根据系统TICK设定)
** Output: 无
******************************************************************************************
*/
void MISARst(uint32 time)
{
uint8 tmp;
tmp = MISA_SYS_CFG;
tmp &= 0xFE;
MISA_SYS_CFG = tmp; // RESET脚输出低电平
OSTimeDly(time);
MISA_SYS_CFG = tmp | 0x01; // RESET脚输出高电平
}
/*
******************************************************************************************
** Function name: void MISAInit(void)
** Descriptions: 初始化MiniISA总线
** Input:
** Output: 无
******************************************************************************************
*/
void MISAInit(void)
{
uint8 tmp;
tmp = MISA_IRQStat; // 清中断标志
MISA_IntEn = 0x0F; // 使能所有IRQ通道
//while(1){
MISARst (200);
//}
MISA_SYS_CFG |= 0x02; // MiniISA中断总使能
}
/*
******************************************************************************************
** Function name: void EMCInit(void)
** Descriptions: 初始化外部总线
** Input:
** Output: 无
******************************************************************************************
*/
void EMCInit(void)
{
//uint32 tmp;
PCONP |= 0x00000800; // 打开EMC控制器
PINSEL4 |= 0x01<<28; /* CS2 */
PINSEL6 = 0x55555555; /* D0--D15 */
PINSEL8 = 0x55555555; /* A0--A15 */
PINSEL9 = 0x55555555; /* A19--A23,nOE,nWE */
//EMCControl = 0x01; /* 使能EMC、禁止映象 */
/* 字节状态位PB为1,nOE读、nWR写*/
EMCStaticConfig2 = 0x00000080; /* 16位数据总线,使用延时 */
EMCStaticWaitWen2 = 0x0;//f; /* 写使能延时为 */
EMCStaticWaitOen2 = 0x0;// 0xf; /* 从器件输出使能延时为 */
EMCStaticWaitRd2 = 0x1f;// 0x2; /* 延时 后再读 */
EMCStaticWaitPage2 = 0x0; /* 页读写转换时间为 */
EMCStaticWaitWr2 = 0x1f;// 0x4; /* 写失效时间为 */
EMCStaticWaitTurn2 = 0x0;
EMCControl = 0x00000001;
}
/*
******************************************************************************************
** Function name: void WriteBus(const uint8 *str, uint8 base, uint8 len)
** Descriptions: 写总线
** Input: str 写入数据指针
** base 起始地址
** len 长度
** Output: 无
******************************************************************************************
*/
void WriteBus(const uint8 *str, uint8 base, uint8 len)
{
uint8 i;
for (i=0; i<len; i++)
{
*(volatile unsigned char *)(MISA_BASE_ADDR + base + i) = str[i];
}
}
/*
******************************************************************************************
** Function name: void ReadBus(uint8 *info, uint8 base, uint8 len)
** Descriptions: 读总线
** Input: info 读取数据缓存首地址
** base 起始地址
** len 字节数
** Output: 无
******************************************************************************************
*/
void ReadBus(uint8 *info, uint8 base, uint8 len)
{
uint8 i;
for (i=0; i<len; i++)
{
info[i] = *(volatile unsigned char *)(MISA_BASE_ADDR + base + i);
}
}
/*
******************************************************************************************
** Function name: void InitExInt(void)
** Descriptions: 初始化外部中断0 (EINT0)
** Input:
** Output: 无
******************************************************************************************
*/
void InitExInt(void)
{
PINSEL4 = PINSEL4 & (~(0x03 << 20)) | (0x01 << 20); // P2.10连接EINT0
EXTINT |= 0xf; // 清外部中断0中断标志
EXTMODE |= 0x01;
EXTPOLAR = 0x00;
SetVICIRQ(0x14, 14, (uint32)Eint0_Exception); // 初始化VIC
}
/*
******************************************************************************************
** Function name: void Eint0_Exception(void)
** Descriptions: MiniISA中断函数
** Input:
** Output: 无
******************************************************************************************
*/
void Eint0_Exception(void)
{
uint8 tmp;
tmp = MISA_IRQStat & 0xf;
if (tmp & 0x01)
{
Int8016A(); // 8016A使用IRQ0
}
if (tmp & 0x02)
{ // 针对不同中断号的处理
}
if (tmp & 0x04)
{
}
if (tmp & 0x08)
{
}
EXTINT = 1<<0; // 清外部中断0中断标志
VICVectAddr = 0x00; // 通知VIC中断处理结束
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -