This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

MSP432P401R: 请问我在使用TI-Drivers库的时候,是否可以为同一个外设同时开启多个句柄Handle?

Part Number: MSP432P401R


我在学习使用TI-Drivers库,但是我对于这个库的封装原理有所疑问,当我使用某一个外设的时候我需要将其配置参数然后开启句柄,在一次配置中我使用了一个参数结构体配置了两个不同的外设(两个SPI,他们是在syscfg中配置过的),但是第二个外设好像没有配置成功。为此我想了解一下在TI库open这个过程中究竟发生了什么,是对寄存器进行了操作?还是完成了某种数据结构?我是否可以用一个params结构体来配置同一种类的不同外设?而我又是否可以为某一个外设同时open多个句柄用来在不同时间段操作它?

  • 在一次配置中我使用了一个参数结构体配置了两个不同的外设(两个SPI,他们是在syscfg中配置过的),但是第二个外设好像没有配置成功。

    能否请您详细描述一下?

    为此我想了解一下在TI库open这个过程中究竟发生了什么,是对寄存器进行了操作?还是完成了某种数据结构?我是否可以用一个params结构体来配置同一种类的不同外设?而我又是否可以为某一个外设同时open多个句柄用来在不同时间段操作它?

    我认为是不可以同时的。我需要在确认后给您回复

  • 在一次配置中我使用了一个参数结构体配置了两个不同的外设(两个SPI,他们是在syscfg中配置过的),但是第二个外设好像没有配置成功。

    能否请您详细描述一下?

    我记得大概我是使用了如下的代码进行的测试,不过当时并没有记录这个问题所以只是存在一点记忆。

    SPI_Params SPI_test;
    SPI_Params_init(&SPI_test);
    Handle1 = SPI_open(SPI_CONFIG_0, &SPI_test);
    
    SPI_test.frameFormat = SPI_POL1_PHA1;
    Handle2 = SPI_open(SPI_CONFIG_1, &SPI_test);
    if(Handle2 == NULL)
    {
        while(1){}
    }

    我当时猜测的是封装库中使用了某种方法将一些内部指针指向了我注册的参数结构体,所以我不能将其继续作为其它外设的结构体进行重新注册,但是我并没能证实这个猜想,因为一些代码我不知道该如何进行跳转。

    此外open那个部分其实我还有一个疑问,在syscfg中我们使用了一些参数配置,但是到后面我们又会使用params结构体将其替换掉,那么在syscfg中设置的如串口波特率之类的参数似乎失去了意义?

  • 在一次配置中我使用了一个参数结构体配置了两个不同的外设(两个SPI,他们是在syscfg中配置过的)

    对于单个 SPI 总线,不应有连续的 SPI_open 或 SPI_close。您的SPI_CONFIG_0/1是如何配置的?若是可以的话,请上传一下工程,我们具体看一下,谢谢