기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.

이 소스는 이솝소스에서 참조하여 작성한것입니다.
아래의 IIS 레지스터에 write를 하고 read하면 write한 값이 읽히는데
딜레이(10Us)를 주거나 두번째 read를 하면 레지스터값이  reset value로 읽힙니다.
조언 부탁합니다.

void
start_aesop2440_iis_bus_tx(void)
{
        unsigned int iiscon=0,iismod=0,iispsr=0,iisfcon=0;
        int err;

        printk("start_aesop2440_iis_bus_txn");

//44 KHz , 384fs
        iispsr = IISPSR_A(iispsr_value(AUDIO_RATE_DEFAULT)) | IISPSR_B(iispsr_value(AUDIO_RATE_DEFAULT));
        iiscon = S3C2410_IISCON_TXDMAEN | S3C2410_IISCON_RXIDLE | S3C2410_IISCON_PSCEN |
                S3C2410_IISCON_IISEN;
        iismod = S3C2410_IISMOD_MASTER | S3C2410_IISMOD_TXMODE | S3C2410_IISMOD_LR_RLOW |        
                S3C2410_IISMOD_MSB | S3C2410_IISMOD_16BIT | S3C2410_IISMOD_32FS |                                        
#if (S_CLOCK_FREQ == 384)
                S3C2410_IISMOD_384FS;                        
#else
                S3C2410_IISMOD_256FS;                        
#endif
        iisfcon = S3C2410_IISFCON_TXDMA | S3C2410_IISFCON_TXENABLE;

        if(err = access_ok (VERIFY_READ, regs_iis_base, SZ_1M))
                  printk("S3C2410_VA_IIS Access Read err [%d]n",err);
        if(err = access_ok (VERIFY_WRITE, regs_iis_base, SZ_1M))
                  printk("S3C2410_VA_IIS Access Write err [%d]n",err);
        

        *(unsigned int *)(regs_iis_base + S3C2410_IISPSR) = iispsr;
        
        printk("S3C2410_IISPSR  ==> 0x%08xn",*(unsigned int *)(regs_iis_base + S3C2410_IISPSR));        
        printk("S3C2410_IISPSR  ==> 0x%08xn",*(unsigned int *)(regs_iis_base + S3C2410_IISPSR));
        
        *(unsigned int *)(regs_iis_base + S3C2410_IISMOD) = iismod;

        printk("S3C2410_IISMOD  ==> 0x%08xn",*(unsigned int *)(regs_iis_base + S3C2410_IISMOD));
        printk("S3C2410_IISPSR  ==> 0x%08xn",*(unsigned int *)(regs_iis_base + S3C2410_IISPSR));
        
        *(unsigned int *)(regs_iis_base + S3C2410_IISFCON) = iisfcon;
        
        printk("S3C2410_IISFCON ==> 0x%08xn",*(unsigned int *)(regs_iis_base + S3C2410_IISFCON));
        printk("S3C2410_IISPSR  ==> 0x%08xn",*(unsigned int *)(regs_iis_base + S3C2410_IISPSR));
        
        *(unsigned int *)(regs_iis_base + S3C2410_IISCON) = iiscon;

        printk("S3C2410_IISCON  ==> 0x%08xn",*(unsigned int *)(regs_iis_base + S3C2410_IISCON));
        printk("S3C2410_IISPSR  ==> 0x%08xn",*(unsigned int *)(regs_iis_base + S3C2410_IISPSR));

}
List of Articles
번호 제목 글쓴이 날짜 조회 수

사용자 로그인