in uboot ,I configure as follow
MUX_VAL(CP(MCSPI2_SIMO), (IEN | PTD | DIS | M1))
MUX_VAL(CP(MCSPI2_SOMI), (IEN | PTD | DIS | M1))
i wrote a driver to genarate pwm at timer_ptr9 and timer_ptr10,the details are as follow
static struct omap_dm_timer *timer_ptr9,*timer_ptr10;
void shp(void)
{
timer_ptr9 = omap_dm_timer_request_specific(9);
if(timer_ptr9 == NULL)
{
printk("gptimer test: No more gp timers available, bailing out\n");
return -1;
}
omap_dm_timer_set_pwm(timer_ptr9,0,1,OMAP_TIMER_TRIGGER_OVERFLOW_AND_COMPARE);
omap_dm_timer_set_source(timer_ptr9, OMAP_TIMER_SRC_SYS_CLK);
omap_dm_timer_set_prescaler(timer_ptr9, 7);
omap_dm_timer_set_load(timer_ptr9, 1, 0xFFFFFFFE);
omap_dm_timer_write_counter(timer_ptr9, 0xFFFFFFFE);
omap_dm_timer_set_match(timer_ptr9, 1, 0xFFFFFFFE);
omap_dm_timer_start(timer_ptr9);
}
void shd(void)
{
timer_ptr10 = omap_dm_timer_request_specific(10);
if(timer_ptr10 == NULL)
{
printk("gptimer test: No more gp timers available, bailing out\n");
return -1;
}
omap_dm_timer_set_pwm(timer_ptr10,0,1,OMAP_TIMER_TRIGGER_OVERFLOW_AND_COMPARE);
omap_dm_timer_set_source(timer_ptr10, OMAP_TIMER_SRC_SYS_CLK);
omap_dm_timer_set_prescaler(timer_ptr10, 7);
omap_dm_timer_set_load(timer_ptr10, 1, 0xFFFFFFFE);
omap_dm_timer_write_counter(timer_ptr10, 0xFFFFFFFE);
omap_dm_timer_set_match(timer_ptr10, 1, 0xFFFFFFFE);
omap_dm_timer_start(timer_ptr10);
}
static ssize_t caiji_rd(struct file *file, char *buffer, size_t count, loff_t * offset)
{
unsigned short int *dbuf;
dbuf=kmalloc(2048*sizeof(unsigned short int), GFP_KERNEL);
shp();
shd();
omap_dm_timer_free(timer_ptr9);
omap_dm_timer_free(timer_ptr10);
copy_to_user(buffer, (char*)dbuf, 4096);
kfree(dbuf);
return 0;
}
i also wrote a application program
while(1)
{
read(fd, buffer, 4096);
}
I can get pwm at corresponding pins,but the relation of timer_ptr9 and timer_ptr10 is not fixed ;another problem is how to know the pwm is high first or low first
anyone who could help me will be very appreciated !