[PATCH] BSP for TMS570LS31x Hercules Development Kit from TI (TMS570LS3137)

Joel Sherrill joel.sherrill at oarcorp.com
Thu Aug 14 13:56:35 UTC 2014


On 8/14/2014 8:46 AM, Pavel Pisa wrote:
> Hello Gedare,
>
> On Thursday 14 of August 2014 15:12:44 Gedare Bloom wrote:
>> On Thu, Aug 14, 2014 at 4:53 AM, Pavel Pisa <pisa at cmp.felk.cvut.cz> wrote:
>  > I am OK with single bit masks - BSP_BIT32(7), but I prefer only single
>>> define per multi bit field. So my own approach is to use macros to find
>>> field start bit from maks
>>>
>>> /*masked fields macros*/
>>> #define __val2mfld(mask,val) (((mask)&~((mask)<<1))*(val)&(mask))
>>> #define __mfld2val(mask,val) (((val)&(mask))/((mask)&~((mask)<<1)))
>> Do you get the similar effect from BSP_FLD32?
>> http://git.rtems.org/rtems/tree/c/src/lib/libbsp/shared/include/utility.h#n
>> 68
> You get exactly same code if mask is constant and contains only
> single continuous region of one bits. The main advantage is,
> that you can define everything required to describe field
> by single plain define
>
> #define MODULEx_REGy_FIELDx_m 0x00000f00
>
> or in BSP utility language more readable
>
> #define MODULEx_REGy_FIELDx_m BSP_MSK32(8, 11)
>
> Then to access filed in register (if struct is used for registers
> placement in memory) you get
>
>
> value = __mfld2val(MODULEx_REGy_FIELDx_m, MODULEx->REGy);
>
> to setup register by values for more fields
>
>   MODULEx->REGy = __val2mfld(MODULEx_REGy_FIELD1_m, val1) |
>                   __val2mfld(MODULEx_REGy_FIELD2_m, val2);
>
>
> To replace field value
>
>   MODULEx->REGy = (MODULEx->REGy & ~MODULEx_REGy_FIELDz_m) |
>                   __val2mfld(MODULEx_REGy_FIELDz_m, val1);
>
> I see significant advantage in defining of plain masks without get/set
> that they suggest to be used directly in more situations.
> I.e. used in atomic clear mask or other special instructions.
I personally like using pointers with structures that represent device
layout.
Then just using the pointers appropriately. The get/set macros tend to
end up
with casts which can cover up type issues.
> In the fact, real mask can be retrieved from set/get pair by little
> (or bigger) hack
>
>
>    MODULEx_REGy_FIELDx_SET(~1)
>
> You can get the first bit position still too
>
>    __builtin_ffs(MODULEx_REGy_FIELDx_SET(~1))
>
> and bit count similar way from get or by more ops from SET.
> But seems to be hacky to me.
>
> Anyway all these is compiled to constants by GCC.
> So no overhead only final and and shift if value
> put into field is not constant.
>
> I have used __val2mfld/__mfld2val names with two underscores
> to be outside of clash with POSIX when masks are used
> in generic headerfiles which can be included by third party
> libraries.
>
> But if you accept these in BSP_ space for RTEMS, I would be happy
> with any other descriptive name
>
> #define BSP_TOFLD(mask,val) (((mask)&~((mask)<<1))*(val)&(mask))
> #define BSP_FROMFLD(mask,val) (((val)&(mask))/((mask)&~((mask)<<1)))
>
> or under some other name BSP_MF2V  BSP_V2MF ???? in
>
>   http://git.rtems.org/rtems/tree/c/src/lib/libbsp/shared/include/utility.h
>
>>> for constant masks they compile optimal way and for variable
>>> they are usable too if CPU has ffs/clz support.
>>>
>>> http://sourceforge.net/p/ulan/sysless/ci/master/tree/arch/arm/generic/def
>>> ines/cpu_def.h
>>>
>>> This is how I use it in our bare HW/system-less code
>>>
>>> http://sourceforge.net/p/ulan/sysless/ci/master/tree/libs4c/spi/spi_lpcss
>>> p.c#l200
>>>
>>>  lpcssp_drv->ssp_regs->CR0 =
>>>      __val2mfld(SSP_CR0_DSS_m, lpcssp_drv->data16_fl? 16 - 1 : 8 - 1) |
>>>      __val2mfld(SSP_CR0_FRF_m, 0) |
>>>      (msg->size_mode & SPI_MODE_CPOL? SSP_CR0_CPOL_m: 0) |
>>>      (msg->size_mode & SPI_MODE_CPHA? SSP_CR0_CPHA_m: 0) |
>>>      __val2mfld(SSP_CR0_SCR_m, 15);
>>>
>>> http://sourceforge.net/p/ulan/sysless/ci/master/tree/arch/arm/mach-lpc17x
>>> x/libs/hal/hal_gpio.c#l32
> Best wishes,
>
>                   Pavel
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel

-- 
Joel Sherrill, Ph.D.             Director of Research & Development
joel.sherrill at OARcorp.com        On-Line Applications Research
Ask me about RTEMS: a free RTOS  Huntsville AL 35805
Support Available                (256) 722-9985



More information about the devel mailing list