C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5685|回复: 1
打印 上一主题 下一主题

C6747利用McASP发送中断方式完成音频输入信号的直接输出

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:- F% L9 \; {& l
main文件:
$ }! B, v7 T+ k5 @) Ainterrupt void interrupt4(void)  & j) t; l9 ~) ]/ a2 \2 a3 `2 g% \
{
9 x) |, N, S, v2 k  Uint32 sample;- s+ V( y( p2 c
9 X$ F, H8 f* N7 f( J, I
  sample = input_sample(); // read L + R samples from ADC& v; w( |0 X- j+ }
  output_sample(sample);   // write L + R samples to DAC
' j" Y: G) x* U; O( ]7 p+ L: P# N  return;# v* v) l1 j6 h. u) X! k! N
}
9 O0 C/ P3 O! L, D$ n9 ~  U  d$ _) {: J3 G# D- E
int main( void )0 U- ~+ C4 \3 G# M3 H
{
3 `2 @& P% M- m# p
; s  J5 c; d# ]. U3 R# }    /* Initialize BSL */
. J- h: O7 a# `# X    EVMC6747_init( );0 f/ Z- R: T: J# d
        /* Call evmc6747_intr function */  j) C: {( Y9 o0 V9 X0 X3 U
    aic3106_init( );
$ J  M1 e# ^! l  Z3 m5 X( {6 @) l        while(1);
2 ?  Q) W4 L, h6 O' {+ I}
" u$ k, x5 S2 }: \' L& K) E
2 j3 N( ~+ }$ E  Y* m: v7 x! ^/ B
0 L' M; l7 j7 f/ a0 s3 p: \* maic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题) F  f* Z; T/ N' U
/* Initialize MCASP1 */
1 S, P  V* x* m9 e% ~    mcasp = &MCASP_MODULE_1;
' X" v( k: [" x    mcasp->regs->GBLCTL  = 0;       // Reset( T: c9 ?$ j$ b* a+ p) R2 e/ W3 N$ j
    mcasp->regs->RGBLCTL = 0;       // Reset RX
0 d$ R2 e$ N8 e9 _- N9 ]% H! u    mcasp->regs->XGBLCTL = 0;       // Reset TX
; o# J% h0 N9 V2 Y4 n3 i    mcasp->regs->PWRDEMU = 1;       // Free-running$ e) G0 V. G8 E! e' n+ K
   // configure McASP0 receive registers
% X- @' J5 M) L! Y6 b$ P0 U    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
& K; ~5 L+ p5 |% d2 [- W/ f# f    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus- g5 h# q: U$ v7 G* u7 l% m- b# \
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word: [% C6 p5 L% \
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
6 W# j0 d+ w, ?) W! a1 i    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)" V& L2 u, f9 j& ?
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1- y# u- U8 [+ t* o& d
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
4 G6 W6 W- s; h    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2560 y7 \& y. q7 K0 w! p

/ ]- o" J! k; V9 Y7 j2 m, |8 ?    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
1 t: y2 I6 p7 W+ e2 B    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
2 p. w8 |, T6 _    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
8 G6 e+ x' d2 T& X. ?) z, \    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16. A, F: Q; t, }% m
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK. e) G3 g5 r1 {6 W! R. O0 p
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1( x9 e$ W2 H/ X+ l4 ~' P
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
( f9 b- p" V; h    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
/ y, i  V: J( A, s: |
6 [. O+ k/ \! x8 |$ x2 m4 ]    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
! T- z7 o* E, _# d3 r  L2 x    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
! v: Y( |8 [, K' K    mcasp->regs->PFUNC      = 0;          // All MCASPs
: |- z- g- f# W4 _" w8 Y$ i    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1' n3 d& `* ~- `

0 E6 a* R* j  N( ~( U    mcasp->regs->DITCTL     = 0x00000000; // Not used
1 n3 X+ {; y" ]) C    mcasp->regs->DLBCTL     = 0x00000000; // Not used1 N( p9 u& {. |1 t/ s$ }
    mcasp->regs->AMUTE      = 0x00000000; // Not used
: y! O7 v* c1 g& B( S) D) _( l2 M0 Q* V  R# V' }
/* Starting sections of the McASP*/
! O6 `& P+ \; m    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
4 f9 s7 @( I7 Z2 |# T0 T5 K    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
! c  j" e2 Y# T: Z- T3 n2 i; {    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; $ M8 u, b, W; h, W4 R
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
, ?5 [& x7 W+ J- X8 s, O( G2 f* v9 ]) D) s
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 5 h9 c/ G2 }3 o  }; o" ]
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );% x$ i  y! h% f, F& ?# R0 v  M6 t
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; & a* B+ w' s: Q+ \1 K
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );+ m/ m+ i: G( k, A
5 Q& G/ g) @! k7 v. P
    mcasp->regs->XSTAT = 0x0000ffff; / O$ s2 _8 \5 D1 p
    mcasp->regs->RSTAT = 0x0000ffff;
/ |3 i; k: U; H/ I" c5 N: C' A
8 x! g# o( k. N  c1 O! g. U    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
% [/ ^3 B. L7 b/ B, K6 X    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
7 n% h- }4 N' F- r# W+ [    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
: E( t( e: A( v    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );% L0 R% I, v" e; E

; u0 L# s# M" G' l    /* Write a 0, so that no underrun occurs after releasing the state machine */
$ m4 U6 s. n# c, T/ ^- T. h    mcasp->regs->XBUF5 = 0;
/ Z) j' |( S4 k' V7 }  h2 j" {    mcasp->regs->RBUF0 = 0;  ?- }2 M* e9 V# S8 @
' ?3 M7 s) ?! o
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
+ u3 C9 K9 n, B) v* g. m' h    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );$ i9 H4 x4 K' y! t  V
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 6 W2 _5 |8 ?& Y2 w  X
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );, v" o6 i) P% G% n6 b" g( k" `4 u
) n+ D3 \2 u! X9 t5 H' i
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; % V# U6 S1 z8 h* ]
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );' N  O- ?" \9 |
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
7 e1 O/ @: G2 T4 `3 j+ t    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
, N' F, q; }. ]$ c: r6 J
8 Z) f8 V; J) S( `9 W0 t0 A    CSR = 0x0000;. U% X& A* s8 D9 n5 h, K+ z7 \' W. N
    INTC_INTMUX1 = 0x3d;! v, n% ]0 V) S3 ^* M* l
    ISTP = (unsigned int)vectors;$ L/ ^, b1 u; L' O" x
    ICR = 0xFFF0;  # s5 A4 F5 K4 Y. `, V
    IER |= 0x12;  3 [! b% r# B) u8 B+ M4 a
    CSR |= 0x01;  . A; {' I- f0 S! D
8 g& {7 ~# S' X0 J

6 C8 m; ~3 Z- Q& V  p6 `8 r7 t2 W
# z* N  m6 W/ {- i还有就是两个输入输出函数:% ~: W# Z& m) a1 ?' b* N+ D  w
void output_sample(Int32 out_data)* d( [$ a4 s% [% |  F( p$ `
{
6 ~7 v" b# ^8 I: {" i2 S  AIC31_data.uint = out_data;  , r: n( F0 P: F* x
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
& U9 V  Q- D6 R9 z& Y}
( o# O$ Q& O, m  ~( v) R$ s! `- a1 m& |" ]* T, V
Int32 input_sample(void)
' {6 @- D5 o8 L; A0 e* W{  ' @) W% O4 d; R  t' _1 c8 k5 Q7 i
  AIC31_data.uint = MCASP1_RBUF0_32BIT;# y! T8 w/ q8 S" B
  return (AIC31_data.uint);' C8 t8 d# E* F/ A+ t
}
4 e3 h" z8 U9 d2 X4 i3 L5 @4 O* i# ?5 d/ \4 d
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
沙发
发表于 2016-3-16 11:55:59 | 只看该作者
可以参看创龙提供的例程:AUDIO_LINE_OUT_INTR——Line Out 音频输出(中断方式)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2025-12-2 11:53 , Processed in 0.040176 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表