[ell-i-developers] Re: PWM configuration

  • From: Ivan Raul <supra.material@xxxxxxxxx>
  • To: ell-i-developers@xxxxxxxxxxxxx
  • Date: Fri, 24 Jan 2014 18:53:36 +0200

I changed to a more elegant version... still no difference. I'm thinking if
there is no problem that the routine writes to reserved values. In order to
keep the original intended functionality of the routine, I propose this
alternative.

To write in the offset of the 16bit register(also applies to 32b) to the
struct

@system_init.h

From this:

typedef struct {
    const uint16_t           init_data16;
} SystemInitRecordData16NoAddress;

To something like this

typedef struct {
    const uint16_t           init_data16;
    const uint16_t           offset;
} SystemInitRecordData16NoAddress;

Then it would be possible to only write the addresses we want in a compact
fashion, and would avoid extra space in storage, as right now if we write
two registers e.g. one at offset 0x00 and other at offset 0x44 (as now does
timer init), it generates in total a 35 elements array (considering 16b
elements), instead of two.

Thank you for your comments.


With Warm Regards, Ivan Raul


On Fri, Jan 24, 2014 at 6:22 PM, Ivan Raul <supra.material@xxxxxxxxx> wrote:

> Some advice...
>
> I have two problems. The first is that this function seems to not advance
> the *r pointer.
> I am not sure if my solution is correct.
>
> Second, it needs to advance only by 16 bits, as the size of the array, is
> the size of the total 16 elements, not only the ones we need to write. For
> that reason, I modified the initialization procedure of the timer to
> include all non - reserved registers, to put them to their reset state, as
> this function will write all the values as size of the array. This function
> so far is only able to update the first element, but fails for the rest.
>
> void SystemInitData16NoAddress(const SystemInitRecordArray *ra) {
>     const SystemInitRecordData16NoAddress *r
>         = (const SystemInitRecordData16NoAddress
> *)ra->init_records_data16_no_address;
>
>     register volatile uint16_t *a = ra->init_record_address16;
>     for (int i = 0; i < ra->init_record_number; i++) {
>         *a = (&r[i])->init_data16;   // Write 16 bits
> //        a += 2;                // Advance by 32 bits
>         a++;
>
>     }
> }
>
>
> With Warm Regards, Ivan Raul
>
>
> On Fri, Jan 24, 2014 at 5:07 PM, Ivan Raul <supra.material@xxxxxxxxx>wrote:
>
>> I made the pull request, has the previous changes. I hope to have
>> something solid to push later today.
>>
>> With Warm Regards, Ivan Raul
>>
>>
>> On Fri, Jan 24, 2014 at 4:43 PM, Pekka Nikander <pekka.nikander@xxxxxx>wrote:
>>
>>>
>>> > Pekka: What do you suggest as following step? I was planning first to
>>> make the timer configured from initialization records, and then start
>>> porting the AF default values to the gpio initialization.
>>>
>>> Sounds good to me. Also start committing your fixes so that I'll be able
>>> to merge them.
>>>
>>
>>
>

Other related posts: