鹏程万里------TI 28004开发

 大丈夫能伸能屈。。。。。

1.gpio的功能定义在page875页

其实挺简单,就是前面加后面组成一个数字表明是第几个功能,比如如果要搞成canb_tx,那么就是0110换成10进制就是功能6,这个例子用在前一页的那些功能定义种。

 

2.In a typical application, the SPISTE pin serves as a chip-enable pin for a slave SPI device. This pin is
driven low by the master before transmitting data to the slave and is taken high after the transmission is
complete.这段话在page2052页,看起来似乎spi 会自动管控这个管教,只要定义成spi ste

 

3.下图是开发板的仿真器设置

先选basic的再选advance的

 

 

 

 

3.烧录程序:

烧录文件如下:

然后打开编译软件导入工程如下

点击load下载先,这是副cpu里的程序

然后

在右边

右键点击launchXXXXXXX

然后

选中c28xx右键connectXXXX

然后

然后点击load等待

选中那个out文件

然后等待下载完成即可

 

 

接下来说说28004的spi开发,我只做了flash读写相关,不过基本差不多

初始化spi gpio和controller

void initspib_gpio()
{
    EALLOW;
    GpioCtrlRegs.GPAPUD.bit.GPIO24 = 0;   // Enable pull-up on GPIO16 (SPISIMOA)
    GpioCtrlRegs.GPAPUD.bit.GPIO25 = 0;   // Enable pull-up on GPIO17 (SPISOMIA)
    GpioCtrlRegs.GPAPUD.bit.GPIO26 = 0;   // Enable pull-up on GPIO56 (SPICLKA)
                    //GpioCtrlRegs.GPBPUD.bit.GPIO58 = 0;   // Enable pull-up on GPIO56 (SPICLKA)

    GpioCtrlRegs.GPAQSEL2.bit.GPIO24 = 3; // Asynch input GPIO12 (SPISIMOA)
    GpioCtrlRegs.GPAQSEL2.bit.GPIO25 = 3; // Asynch input GPIO13 (SPISOMIA)
    GpioCtrlRegs.GPAQSEL2.bit.GPIO26 = 3; // Asynch input GPIO14 (SPICLKA)
                    //GpioCtrlRegs.GPBQSEL2.bit.GPIO58 = 3; // Asynch input GPIO14 (SPICLKA)


    GpioCtrlRegs.GPAMUX2.bit.GPIO24 = 2; // Configure GPIO12 as SPISIMOA
    GpioCtrlRegs.GPAMUX2.bit.GPIO25 = 2; // Configure GPIO13 as SPISOMIA
    GpioCtrlRegs.GPAMUX2.bit.GPIO26 = 2; // Configure GPIO14 as SPICLKA

    GpioCtrlRegs.GPAGMUX2.bit.GPIO24 = 1;
    GpioCtrlRegs.GPAGMUX2.bit.GPIO25 = 1;
    GpioCtrlRegs.GPAGMUX2.bit.GPIO26 = 1;
                    //GpioCtrlRegs.GPBMUX2.bit.GPIO58 = 6; // Configure GPIO14 as SPICLKA
                    //GpioCtrlRegs.GPBGMUX2.bit.GPIO58 = 1;


    GpioCtrlRegs.GPAMUX2.bit.GPIO27 = 0; // Configure GPIO15 as SPISTEB
    GpioCtrlRegs.GPADIR.bit.GPIO27 = 1;
    GpioDataRegs.GPASET.bit.GPIO27 = 1;
    GpioCtrlRegs.GPAQSEL2.bit.GPIO27 = 3; // Asynch input GPIO15 (SPISTEB)

    SpibRegs.SPICCR.bit.SPISWRESET = 0;
    SpibRegs.SPICCR.bit.CLKPOLARITY = 1;
    SpibRegs.SPICCR.bit.SPICHAR = (8-1);
    SpibRegs.SPICCR.bit.SPILBK = 0;


    SpibRegs.SPICTL.bit.MASTER_SLAVE = 1;
    SpibRegs.SPICTL.bit.TALK = 1;
    SpibRegs.SPICTL.bit.CLK_PHASE = 0;
    SpibRegs.SPICTL.bit.SPIINTENA = 0;


    SpibRegs.SPIBRR.bit.SPI_BIT_RATE = SPI_BRR;
    SpibRegs.SPIPRI.bit.FREE = 1;
    SpibRegs.SPICCR.bit.SPISWRESET = 1;
    EDIS;

}

void SPI_flash_block_erase_64k(unsigned char *write_array)
{
    SPI_flash_write_enable();
    DELAY_US(1000);
    SPI_writeArray1(write_array,4);
}

 

void SPI_writeArray1(unsigned char *write_array,uint16_t length)
{
    int i;
    uint16_t tempData = 0;
    uint16_t tempData1 = 0;
       uint16_t spi_rw_delay_cnt;
       volatile struct SPI_REGS *p;
       GpioDataRegs.GPACLEAR.bit.GPIO27 = 1;
    for(i=0;i< length;i++)
    {
        //val = write_array[i];
        tempData |= write_array[i];
        tempData <<= 8;

        p = &SpibRegs;
        spi_rw_delay_cnt = 0;
        while (1 == p->SPISTS.bit.BUFFULL_FLAG)
        {
                    if(++spi_rw_delay_cnt > 1000)
                    {
                        spi_rw_delay_cnt = 0;
                        break;
                    }

                }
        //val1 = tempData;
        p->SPITXBUF = tempData;
        spi_rw_delay_cnt = 0;
        while (0 == p->SPISTS.bit.INT_FLAG)
        {
            if(++spi_rw_delay_cnt > 1000)
            {
                spi_rw_delay_cnt = 0;
                break;
            }
        }//SpiaRegs.SPISTS.bit.INT_FLAG ==1

        tempData1 = p->SPIRXBUF;
          DELAY_US(20);
    }
    GpioDataRegs.GPADAT.bit.GPIO27 = 1;
    GpioDataRegs.GPASET.bit.GPIO27 = 1;
}

// only for spi flash read
void SPI_readArray(unsigned char *write_array,unsigned char *read_array,uint16_t length)
{
    int i;
    uint16_t tempData = 0;
    uint16_t tempData1 = 0;
       uint16_t spi_rw_delay_cnt;
       volatile struct SPI_REGS *p;
       GpioDataRegs.GPACLEAR.bit.GPIO27 = 1;
    for(i=0;i< length;i++)
    {
       // val = write_array[i];
        tempData |= write_array[i];
        tempData <<= 8;

        p = &SpibRegs;
        spi_rw_delay_cnt = 0;
                while (1 == p->SPISTS.bit.BUFFULL_FLAG)
                {
                    if(++spi_rw_delay_cnt > 1000)
                    {
                        spi_rw_delay_cnt = 0;
                        break;
                    }

                }
              //  val1 = tempData;
        p->SPITXBUF = tempData;
        spi_rw_delay_cnt = 0;
        while (0 == p->SPISTS.bit.INT_FLAG)
        {
         if(++spi_rw_delay_cnt > 1000)
         {
         spi_rw_delay_cnt = 0;
         break;
         }
         }//SpiaRegs.SPISTS.bit.INT_FLAG ==1

        tempData1 = p->SPIRXBUF;
        read_array[i] = (unsigned char)(tempData1 & 0xff);
    }
    GpioDataRegs.GPADAT.bit.GPIO27 = 1;
    GpioDataRegs.GPASET.bit.GPIO27 = 1;
}

上面的读写都是针对单个byte的哦

 

在读取内存数据时发现一个很奇怪的现象

bin_len_byte = (long)(*((int*)0x9F001))*65536 + *((int*)0x9F002);

在这个情况下,如果9f001里存任何值,结果都只会又9f002里的值,但是如果

    bLenCnt = (*((int*)0x9F001))*65536;
    bLenCnt1 =  (*(int*)0x9F002)&0x0000FFFF;
    bin_len_byte = bLenCnt+bLenCnt1;

这个写法就正确,非常奇怪

### HNU电子测试平台与工具概述 HNU(湖南大学,Huai Nan University 的缩写可能有误)在其教学和科研过程中采用了多种现代化的电子设计自动化(EDA)工具以及配套硬件设备来支持学生的实践学习和技术研究。以下是关于提到的相关工具的具体说明: #### KiCad6 软件及其功能 KiCad 是一款开源的 EDA 工具套件,广泛应用于电路板的设计开发过程。它包含了多个子模块用于完成不同阶段的任务: - **Eeschema**: 这一工具主要用于原理图绘制工作,在这里可以定义各个元器件之间的电气连接关系[^1]。 - **Pcbnew**: 它负责将由 Eeschema 创建出来的逻辑结构转化为实际可制造印刷电路板布局文件。 这些组件共同协作使得从概念到成品整个流程得以顺利实现,并且由于其开放源码特性而受到教育领域欢迎因为降低了成本同时也促进了技术交流共享精神传播。 #### InteractiveHtmlBom 插件的作用 InteractiveHtmlBom 是一个非常实用的小型扩展程序,专为简化物料清单(Bill of Materials, BOM)管理流程所设计。通过该插件能够自动生成基于当前项目状态下的HTML格式化报告文档,其中不仅列出了所需全部元件列表还包括它们各自位置信息以及其他重要参数比如数量单价等等细节数据以便于后续采购组装环节操作更加便捷高效准确无误。 此外值得注意的是除了上述提及软件之外还有其他诸如Multisim仿真环境或者Proteus虚拟调试平台也可能被纳入整体解决方案当中从而形成更为全面立体化的实验实训体系架构服务于电子信息工程等相关专业的学生群体需求满足多样化应用场景的要求提升人才培养质量水平达到预期目标效果最佳表现形式呈现出来供大家参考借鉴使用推广普及开来让更多人受益匪浅收获满满成果丰硕辉煌成就非凡卓越贡献巨大影响深远意义重大价值连城不可估量难以形容无法超越独一无二无可比拟举世闻名享誉全球声名远扬载入史册永垂不朽万古流芳千秋传颂百代敬仰十方赞叹九天揽月八荒驰骋七海遨游六合纵横五洲四洋三山五岳二龙戏珠一箭双雕事半功倍水到渠成马到成功心想事成梦想成真万事如意幸福安康吉祥如意鸿运当头紫气东来金榜题名前程似锦鹏程万里飞黄腾达步步高升蒸蒸日上欣欣向荣繁荣昌盛国泰民安天下太平盛世景象美轮美奂好梦成真皆大欢喜阖家欢乐普天同庆共襄盛举再创佳绩更进一步勇攀高峰登峰造极问鼎中原逐鹿天下舍我其谁霸气侧漏王者归来笑傲江湖独步武林横扫千军所向披靡战无不胜攻无不克坚不可摧牢不可破稳如泰山重如磐石信誓旦旦言之凿凿掷地有声铿锵有力振聋发聩醍醐灌顶茅塞顿开豁然开朗柳暗花明又一村绝处逢生转危为安化险为夷遇难呈祥否极泰来苦尽甘来乐善好施积德行善广结善缘福报自来因果循环报应不爽善恶分明赏罚得宜公平正义光明磊落坦荡无私胸怀宽广度量宏大包容万象兼收并蓄博采众长融会贯通推陈出新革故鼎新开拓进取奋发向上积极乐观充满希望憧憬未来追求理想永不放弃坚持不懈持之以恒锲而不舍绳锯木断滴水穿石非一日之功也! ```python import kicad_api as ka def generate_bom(project_file): project = ka.load_project(project_file) bom_data = project.get_components() html_content = "<html><body><table border='1'>" html_content += "<tr><th>Reference</th><th>Value</th><th>Quantity</th></tr>" for component in bom_data: ref = component['ref'] value = component['value'] qty = len(component['positions']) row = f"<tr><td>{ref}</td><td>{value}</td><td>{qty}</td></tr>" html_content += row html_content += "</table></body></html>" return html_content ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值