public inbox for ecos-patches@sourceware.org
 help / color / mirror / Atom feed
From: bugzilla-daemon@bugs.ecos.sourceware.org
To: ecos-patches@ecos.sourceware.org
Subject: [Bug 1001397] I2C driver for Kinetis microcontrollers
Date: Tue, 23 Apr 2013 07:01:00 -0000	[thread overview]
Message-ID: <bug-1001397-104-o4IfTpMjiq@http.bugs.ecos.sourceware.org/> (raw)
In-Reply-To: <bug-1001397-104@http.bugs.ecos.sourceware.org/>

Please do not reply to this email, use the link below.

http://bugs.ecos.sourceware.org/show_bug.cgi?id=1001397

--- Comment #58 from Ilija Kocho <ilijak@siva.com.mk> ---
(In reply to comment #57)
> I get the same conservative frequency no matter how
> CYGNUM_DEVS_FREESCALE_I2C_CLOCK_AGR is set.

That means that it is the closest frequency to the set-point (i.e. the closest
higher frequency would give larger error). The frequency selection is rather
coarse so there's little help, given the system clock frequency. By
experimenting I have noticed that if system clock is 100MHz (rather than
current 96MHz) we get better match for 100Khz (and 400Khz). Also with inf that
case the aggressive lookup gives closer (upper) match than conservative.

> 
> I have given the code below, which I know ignores the delay specified in the
> CDL. Is there a different way to write the code so that the delay and AGR of
> the CDL get applied?

Just set i2c_delay (i.e. i2c_bus_time) to 0. Instead of infinite frequency it
will give you the default one.

For example:
     cyg_i2c_device device = {
             .i2c_bus        = &cyg_i2c0_bus,
             .i2c_address    = address,
             .i2c_flags      = 0,
             .i2c_delay      = 0
         };

See other examples for enforcing FIT and aggressive lookup in comment 54.

Some [off topic] remarks to the code below:
device is automatic variable that means it's being initialized every time the
function is called. It's very inefficient. Setting i2c_delay =  0 shall make
initialization far much efficient since the  clock lookup once executed during
initialization of the I2C bus, in subsequent calls will use cached F register
setting. However the code is still less efficient than what's possible, because
the device structure ans device itself shall be initialized on every function
call. The better way is to declare device as static variable (spend little-bit
memory but save little-bit stack and little-bit more CPU time). However, I can
imagine that you use the same (hardware) device from other functions. If it is
true, than device should be a global variable.

> 
> uint16_t smbus_read_word(uint8_t address, uint8_t command)
> {
>     cyg_i2c_device device = {                        \
>             .i2c_bus        = &cyg_i2c0_bus,	     \
>             .i2c_address    = address,               \
>             .i2c_flags      = 0,                     \
>             .i2c_delay      = i2c_bus_time           \
>         };
>     cyg_uint8 buffer[1];
>     cyg_uint8 input[2];
>     buffer[0] = command;
> 
>     cyg_i2c_transaction_begin(&device);
> 	if(!cyg_i2c_transaction_tx(&device, true, &buffer[0], 1, false)) {
>         diag_printf("Read Word: fail TX.\n");
> 	} else if(!cyg_i2c_transaction_rx(&device, true, &input[0], 2, true, true))
> {
>         diag_printf("Read Word: fail RX.\n");
>     }
>     cyg_i2c_transaction_end(&device);
> 
>     return input[1] << 8 | input[0];
> }

-- 
You are receiving this mail because:
You are on the CC list for the bug.

  parent reply	other threads:[~2013-04-23  7:01 UTC|newest]

Thread overview: 84+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <bug-1001397-104@http.bugs.ecos.sourceware.org/>
2011-12-01 15:48 ` [Bug 1001397] I2C driver for Kinetic microcontrollers bugzilla-daemon
2011-12-01 15:52 ` bugzilla-daemon
2011-12-01 15:58 ` bugzilla-daemon
2011-12-13 15:13 ` bugzilla-daemon
2011-12-23 10:41 ` bugzilla-daemon
2011-12-23 13:28 ` bugzilla-daemon
2011-12-23 14:14 ` bugzilla-daemon
2011-12-23 14:15 ` bugzilla-daemon
2011-12-24  9:22 ` bugzilla-daemon
2011-12-24 11:59 ` bugzilla-daemon
2011-12-26  7:32 ` bugzilla-daemon
2012-01-01 21:13 ` bugzilla-daemon
2012-01-10 15:40 ` bugzilla-daemon
2012-01-11 20:33 ` bugzilla-daemon
2012-01-16 14:31 ` bugzilla-daemon
2012-02-07 20:38 ` bugzilla-daemon
2012-02-08  9:12 ` bugzilla-daemon
2012-02-08  9:55 ` bugzilla-daemon
2012-02-11  0:16 ` bugzilla-daemon
2012-02-11 10:14 ` bugzilla-daemon
2012-02-12 19:11 ` bugzilla-daemon
2012-02-12 19:11 ` bugzilla-daemon
2012-02-23 16:11 ` bugzilla-daemon
2012-03-20 15:17 ` bugzilla-daemon
2012-03-31 17:17 ` bugzilla-daemon
2012-05-04 18:17 ` bugzilla-daemon
2012-12-21 20:46 ` bugzilla-daemon
2012-12-24  9:52 ` bugzilla-daemon
2012-12-24 16:53 ` bugzilla-daemon
2012-12-24 16:54 ` bugzilla-daemon
2012-12-24 16:56 ` bugzilla-daemon
2012-12-24 16:56 ` bugzilla-daemon
2012-12-24 17:14 ` bugzilla-daemon
2012-12-24 17:38 ` bugzilla-daemon
2012-12-25 21:32 ` bugzilla-daemon
2012-12-25 21:33 ` bugzilla-daemon
2012-12-25 23:38 ` bugzilla-daemon
2012-12-26 15:06 ` bugzilla-daemon
2012-12-29 14:24 ` bugzilla-daemon
2013-01-02  3:48 ` bugzilla-daemon
2013-01-02  7:07 ` bugzilla-daemon
2013-01-03  9:09 ` bugzilla-daemon
2013-01-03  9:12 ` bugzilla-daemon
2013-01-03 16:27 ` bugzilla-daemon
2013-01-06  5:47 ` bugzilla-daemon
2013-03-02 18:08 ` bugzilla-daemon
2013-03-02 18:09 ` bugzilla-daemon
2013-04-10 20:34 ` bugzilla-daemon
2013-04-10 20:54 ` bugzilla-daemon
2013-04-10 21:14 ` bugzilla-daemon
2013-04-10 21:15 ` bugzilla-daemon
2013-04-10 21:16 ` bugzilla-daemon
2013-04-10 21:17 ` [Bug 1001397] I2C driver for Kinetis microcontrollers bugzilla-daemon
2013-04-11  1:20 ` bugzilla-daemon
2013-04-11  1:25 ` bugzilla-daemon
2013-04-11  1:49 ` bugzilla-daemon
2013-04-13 23:21 ` bugzilla-daemon
2013-04-13 23:22 ` bugzilla-daemon
2013-04-15 16:34 ` bugzilla-daemon
2013-04-17 16:28 ` bugzilla-daemon
2013-04-17 17:43 ` bugzilla-daemon
2013-04-19 16:39 ` bugzilla-daemon
2013-04-20 20:09 ` bugzilla-daemon
2013-04-21  7:47 ` bugzilla-daemon
2013-04-21 14:09 ` bugzilla-daemon
2013-04-23  4:47 ` bugzilla-daemon
2013-04-23  7:01 ` bugzilla-daemon [this message]
2013-04-24  6:56 ` bugzilla-daemon
2013-04-24  9:08 ` bugzilla-daemon
2013-04-24 17:20 ` bugzilla-daemon
2013-04-24 18:46 ` bugzilla-daemon
2013-04-25 17:06 ` bugzilla-daemon
2013-04-26 12:54 ` bugzilla-daemon
2013-04-26 13:39 ` bugzilla-daemon
2013-04-26 17:13 ` bugzilla-daemon
2013-04-26 17:17 ` bugzilla-daemon
2013-04-30 11:40 ` bugzilla-daemon
2013-04-30 11:40 ` bugzilla-daemon
2013-04-30 19:03 ` bugzilla-daemon
2013-08-29 17:58 ` bugzilla-daemon
2013-08-29 18:00 ` bugzilla-daemon
2013-08-30  7:15 ` bugzilla-daemon
2013-08-30  7:18 ` bugzilla-daemon
2014-01-28  1:46 ` bugzilla-daemon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=bug-1001397-104-o4IfTpMjiq@http.bugs.ecos.sourceware.org/ \
    --to=bugzilla-daemon@bugs.ecos.sourceware.org \
    --cc=ecos-patches@ecos.sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).