AT91SAM9260: How to output PCK0 clock on a GPIO pin

Pedro I. Sanchez psanchez at fosstel.com
Mon Aug 31 16:46:18 EDT 2009


On Tue, 01 Sep 2009 08:33:54 +1200, Ryan Mallon <ryan at bluewatersys.com>
wrote:
> Pedro I. Sanchez wrote:
>> On Mon, 31 Aug 2009 23:33:12 +0400, Sergey Matyukevich
>> <geomatsi at gmail.com>
>> wrote:
>>> Hi,
>>>  
>>>> And how do I turn on the PMC clocks for the GPIO?
>>> Assigning gpio pin PC6 to TIOB2 peripheral is only a part of the work.
>>> Timer counters may operate in different modes. Take a look at
>>> the datasheet for at91sam9260, timer counters are covered in chapter
34.
>>>
>>> It looks like 'waveform mode' is what you need (see 34.5.10, 34.5.11).
>>> Before you get desired output on PC6 pin you will have to turn on
>>> waveform operating mode for TIOB2 and to configure its wave shapes.
>>>  
>>> Thanks,
>>> Sergey
>> 
>> Thanks Sergey,
>> 
>> So are the following statements correct?
>> 
>> 1. The pck0 clock I've been playing with has nothing to do with the
clock
>> I
>> want on PC6 (TIOB2).
>> 
>> 2. I have to use instead the "tc2_clk" as defined in
>> arch/arm/mach-at-91/at91sam9260.c.
>> 
>> 3. I have to access the TC_CMR register directly to set things up. I
>> mean,
>> there are no macros already defined to access these structures.
> 
> Attached is a driver for outputting pwm's using the timer counters on
> the at91 (sorry its not a proper patch, but this is just hauled out of
> an old kernel we have). The driver is written for the 2.6.20 and does
> not use the new at91 timer counter library. I think it should be
> reasonably easy to port  to the mainline kernel (if you want to do this
> for mainline inclusion, I'm happy to lend a hand).
> 
> To output a pwm on PC6, add the following code to your board file:
> 
> static struct at91_pwm_data pwm_data[] = {
> 	{
> 		.channel	= 2,
> 		.clock_div	= AT91_TC_SCLK,
> 		.period		= 500000,	/* Milliseconds */
> 		.tiob_duty	= 50,		/* Percentage */
> 		.tio		= AT91_TIOB,
> 	},
> };
> 
> and in your board init function:
> 
> at91_add_device_pwm(pwm_data, ARRAY_SIZE(pwm_data));
> 
> The driver also exports the period, duty and raw ra, rb and rc counter
> values via sysfs.
> 
> HTH,
> ~Ryan

Thank you Ryan! I'll take a look at this as I move into the TC world.

BTW, I found this thread that talks about setting a pulse signal on the TC
pins:

http://www.at91.com/samphpbb/viewtopic.php?f=12&t=18294

This is going to help me as well.


-- 
Pedro




More information about the linux-arm-kernel mailing list