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

2024-09-04 00:38

本文主要是介绍鹏程万里------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;

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

这篇关于鹏程万里------TI 28004开发的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1134504

相关文章

SpringBoot开发中十大常见陷阱深度解析与避坑指南

《SpringBoot开发中十大常见陷阱深度解析与避坑指南》在SpringBoot的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加

Python中对FFmpeg封装开发库FFmpy详解

《Python中对FFmpeg封装开发库FFmpy详解》:本文主要介绍Python中对FFmpeg封装开发库FFmpy,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、FFmpy简介与安装1.1 FFmpy概述1.2 安装方法二、FFmpy核心类与方法2.1 FF

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件

基于Python开发一个有趣的工作时长计算器

《基于Python开发一个有趣的工作时长计算器》随着远程办公和弹性工作制的兴起,个人及团队对于工作时长的准确统计需求日益增长,本文将使用Python和PyQt5打造一个工作时长计算器,感兴趣的小伙伴可... 目录概述功能介绍界面展示php软件使用步骤说明代码详解1.窗口初始化与布局2.工作时长计算核心逻辑3

python web 开发之Flask中间件与请求处理钩子的最佳实践

《pythonweb开发之Flask中间件与请求处理钩子的最佳实践》Flask作为轻量级Web框架,提供了灵活的请求处理机制,中间件和请求钩子允许开发者在请求处理的不同阶段插入自定义逻辑,实现诸如... 目录Flask中间件与请求处理钩子完全指南1. 引言2. 请求处理生命周期概述3. 请求钩子详解3.1

如何基于Python开发一个微信自动化工具

《如何基于Python开发一个微信自动化工具》在当今数字化办公场景中,自动化工具已成为提升工作效率的利器,本文将深入剖析一个基于Python的微信自动化工具开发全过程,有需要的小伙伴可以了解下... 目录概述功能全景1. 核心功能模块2. 特色功能效果展示1. 主界面概览2. 定时任务配置3. 操作日志演示

JavaScript实战:智能密码生成器开发指南

本文通过JavaScript实战开发智能密码生成器,详解如何运用crypto.getRandomValues实现加密级随机密码生成,包含多字符组合、安全强度可视化、易混淆字符排除等企业级功能。学习密码强度检测算法与信息熵计算原理,获取可直接嵌入项目的完整代码,提升Web应用的安全开发能力 目录