SVD文件转换工具

SVD文件转换工具

用途

转换现有svd文件到 mculib4d 的芯片声明工具

代码查阅

代码

module svd;

import std.stdio;

import std.file;

import std.xml;
import std.string;
import std.regex;

struct tys
{
   
   
	union{
   
   
		uint		i1;
		ushort[2]	s1;
		ubyte[4]	b1;
	}
}

int main()
{
   
   
	string svdfile = "STM32F401.svd";

	if(!isFile(svdfile)){
   
   
		return 0;
	}
	
    Etsvd(svdfile);
    return 0;
}

struct mcuinfo
{
   
   
    string name;
    string mversion;
    string description;
    string addressUnitBits;
    string width;
    string size;
    string resetValue;
    string resetMask;

    cpuinfo   cpu;
}

struct cpuinfo
{
   
   
    string name;
    string revision;
    string endian;
    string mpuPresent;
    string fpuPresent;
    string nvicPrioBits;
    string vendorSystickConfig;
}

struct peripheral
{
   
   
    string name;
    string desc;
    string group;
    string    address;
    addressBlock ablock;
    interrupt[] inp;
    register[]  regs;

    string ttext;
    string derivedFrom;
}


struct addressBlock
{
   
   
    string offs;
    string ssize;
    string usage;
}

struct interrupt
{
   
   
    string name;
    string description;
    string val;
}

struct register
{
   
   
    string name;
    string display;
    string description;
    string addressOffset;
    string msize;
    string access;
    string resetValue;
    field[] fields;
}

struct field
{
   
   
    string name;
    string description;
    string bitOffset;
    string bitWidth;
    string access;

}



void Etsvd(string fname)
{
   
   
    string s = cast(string) std.file.read(fname);
    //
    try{
   
   
        //check(s);
	}catch (CheckException e)
	{
   
   
        writefln(e.msg);

	}

    peripheral[] pres;
    mcuinfo info;
    
	DocumentParser svdxml = new DocumentParser(s);
    
    svdxml.onEndTag["name"]       = (in Element e) {
   
    info.name      = e.text(); };
	svdxml.onEndTag["version"]       = (in Element e) {
   
    info.mversion      = e.text(); };
	svdxml.onEndTag["description"]       = (in Element e) {
   
    info.description      = e.text(); };
	svdxml.onStartTag["cpu"] = (ElementParser cp){
   
   
		cpuinfo mcup;
		cp.onEndTag["name"]  = (in Element e) {
   
    mcup.name      = e.text(); };
		cp.onEndTag["revision"]  = (in Element e) {
   
    mcup.revision      = e.text(); };
		cp.onEndTag["endian"]  = (in Element e) {
   
    mcup.endian      = e.text(); };
		cp.onEndTag["mpuPresent"]  = (in Element e) {
   
    mcup.mpuPresent      = e.text(); };
		cp.onEndTag["fpuPresent"]  = (in Element e) {
   
    mcup.fpuPresent      = e.text(); };
		cp.onEndTag["nvicPrioBits"]  = (in Element e) {
   
    mcup.nvicPrioBits      = e.text(); };
		cp.onEndTag["vendorSystickConfig"]  = (in Element e) {
   
    mcup.vendorSystickConfig      = e.text(); };
		cp.parse();
		info.cpu = mcup;
	};
	svdxml.onEndTag["addressUnitBits"]       = (in Element e) {
   
    info.addressUnitBits      = e.text(); };
	svdxml.onEndTag["width"]       = (in Element e) {
   
    info.width      = e.text(); };
	svdxml.onEndTag["size"]       = (in Element e) {
   
    info.size      = e.text(); };
	svdxml.onEndTag["resetValue"]       = (in Element e) {
   
    
		info.resetValue      = e.text(); 
	};
	svdxml.onEndTag["resetMask"]       = (in Element e) {
   
    info.resetMask      = e.text(); };

	svdxml.onStartTag["peripheral"] = (ElementParser xml)
	{
   
   
		peripheral 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值