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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:, J: I; ~* ]0 v- g6 u6 Q
main文件:6 U+ |6 b7 ^) e- g! v( {4 B2 e0 Z* ^
interrupt void interrupt4(void)  & ?3 X3 w6 w$ [9 c
{
6 A: l+ {0 o7 S' s2 O. [  Uint32 sample;
2 `; G8 R# l$ e# x5 G* u
& m3 q# p: F5 r% `5 v  sample = input_sample(); // read L + R samples from ADC
* e) N  j; x0 S0 c* t( O  output_sample(sample);   // write L + R samples to DAC ; L$ ]3 |' H# L5 U& S/ _1 v
  return;
% \% u! J/ ~) f9 |0 u}
, k; t# ^' ^% y- W) O  o# {) v% b( d% q5 w% v
int main( void )+ w6 \! C' X2 q) v& t% y! i
{3 d7 l: z7 Z% E8 x: t, V
2 o4 I$ a$ T- C/ P; }% ~
    /* Initialize BSL */1 K: t( d/ L+ v: g/ O' h! _
    EVMC6747_init( );  V9 P( \' _/ w
        /* Call evmc6747_intr function */
5 ^# k8 ?% j, t, W2 u    aic3106_init( );7 F) k7 f# H1 H$ C7 Q
        while(1);5 o) ~# f  a$ |- e# b
}
9 _' l9 t0 U: z" K" d5 e# Y. _& P  q* [4 \3 E& v
; S! l7 f0 x( {. ]+ Q" _. \
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
! @1 q- H" n/ p1 G* R/ A8 E0 h, a/* Initialize MCASP1 */0 r& B: o+ r4 T" S6 _! ?
    mcasp = &MCASP_MODULE_1;9 Q- V  o6 G2 |0 J, S! B# e& w
    mcasp->regs->GBLCTL  = 0;       // Reset0 r2 Y' b0 a' b* x2 ?) K% _4 J/ P! g
    mcasp->regs->RGBLCTL = 0;       // Reset RX
% E! t2 ]! K& ~9 e% V: ?    mcasp->regs->XGBLCTL = 0;       // Reset TX4 ]2 F- i' i  a
    mcasp->regs->PWRDEMU = 1;       // Free-running7 Y/ b2 H& G1 w8 {! h) k+ M
   // configure McASP0 receive registers
( H/ b. U/ j+ K2 L$ x. L! o1 {    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
% f9 U/ p# v7 a( Y+ a    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ k' a/ Z4 o8 Y
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word- |$ A' F: }+ v; u
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
- ?3 ^: \. b/ M: B: d6 _    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
3 b1 T( @6 z3 Q    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
* e. ~8 f! ~$ ^' A" V    mcasp->regs->RINTCTL    = 0x00000000; // Not used
; \9 k+ O" K; s9 R# B  }    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256$ \& o$ r: l5 o
' S4 m0 v6 |" o" m, j0 A0 S7 T
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
% E* I: l. s5 k7 n. {. S    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" L2 Z7 |! W, @* {- C1 d    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word; p: {. V' ^! o3 A* h5 f
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
1 K! k5 e6 X0 N; g+ {, ^6 C    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
9 h: ~: I3 U$ h' Y    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
' o3 B# C2 z& M+ P+ }3 y, O    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
, e6 g1 {; g+ [6 v    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256* B: V7 h. M+ A7 a1 P+ O: T

  Z' K5 }0 Q' u2 r* t    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
, e3 G* @! g7 z" ~6 ?2 t    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT4 H9 K( l9 J1 v  Z: @; r" g
    mcasp->regs->PFUNC      = 0;          // All MCASPs
% S6 s! |" k4 q1 l# j# O3 u    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX18 u# K. `6 V: N/ x1 o

0 |) U" z; c4 P& w. J    mcasp->regs->DITCTL     = 0x00000000; // Not used% @2 x6 _+ D* @
    mcasp->regs->DLBCTL     = 0x00000000; // Not used; X; n" T, F) j5 w: O6 e
    mcasp->regs->AMUTE      = 0x00000000; // Not used
4 r: [+ Y# L$ U/ Y4 _" r7 u* v5 z) n# n$ d
/* Starting sections of the McASP*/$ x6 V: O$ O5 k- D6 G0 ]2 {
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; + r5 w! z9 j4 K4 Y
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  # j; o/ N9 N+ \$ L! Y" }
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 1 E8 A6 E) ~+ F  ?9 d: o
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );! @. G1 ~: A, ]' r
3 @/ g( h3 k! q& E6 Y, Y
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
+ q8 b% B' w6 d0 K% }  u0 ~    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );& W/ Z1 u& P' c4 @$ h$ s. h
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; + \4 K7 q' C4 T7 f/ U
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
6 W9 i2 F, W5 _& Z0 u# C& `
* T# D) E2 R  Q; O: e$ A6 l    mcasp->regs->XSTAT = 0x0000ffff;
7 c! l- H0 G, v    mcasp->regs->RSTAT = 0x0000ffff;
  J) x+ D2 {$ @6 L4 [* j7 Y$ ^/ \# s9 G: H8 U6 r
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;8 F* Z# n3 z: e
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
8 u' I/ a( z! l    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 8 _4 x$ U, ^: q# b& J; X
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );# O4 [7 k8 Q5 A& K4 }$ A

* Y: F9 B8 k! s    /* Write a 0, so that no underrun occurs after releasing the state machine */
1 a/ Y" c$ p8 d/ y8 H/ ^    mcasp->regs->XBUF5 = 0;
& J! c+ s% w/ z6 W. y) k# e8 E    mcasp->regs->RBUF0 = 0;
$ j+ L: x# t: A3 i2 B  V3 M
' l* l% x( a: D/ e* G% p; M( P$ ?    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
' B4 V5 G! E0 v# \$ f. b9 O; S7 J% w    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );2 k3 k; p. r0 d
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
# h! Q0 Y4 f* S/ W( p, D4 c3 n    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );/ D$ y1 i( {, g6 z

7 o6 [' k; D5 E/ a    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; . W$ p) ^- ^, g
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );7 ^' I4 m4 V- C! ]: ?0 S
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; * [4 R' x7 O, X
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );, H7 n5 [5 |& K' z6 J
+ U- K! U  r) k) x1 P  A$ N
    CSR = 0x0000;
& s% X, B; `. V- N/ o4 d% l    INTC_INTMUX1 = 0x3d;+ ?+ _! x9 `1 y: ^1 u
    ISTP = (unsigned int)vectors;
0 a  h) |1 q: M4 f; N5 y5 ~    ICR = 0xFFF0;  
2 H3 k" G/ i3 q& E    IER |= 0x12;  
- i7 V3 P! g/ p    CSR |= 0x01;  7 |( Y: W* g( F- W  i* {; K) C
1 B8 N: b4 _# Y
% @/ g8 h4 J7 c! a$ R

. w( k$ E0 w  R' S还有就是两个输入输出函数:( d* W" T, E. I  x. U* D0 F& v- M
void output_sample(Int32 out_data)
7 C+ P& h( j3 f1 E' }{& {3 ?3 ~; L; I; [, P
  AIC31_data.uint = out_data;  
4 X# m8 B2 V8 e  |  MCASP1_XBUF5_32BIT = AIC31_data.uint;
9 _4 X; y6 ?' t% i+ @0 J9 @}
2 ^# X7 m+ B0 u9 m6 t7 D  u/ j
' o% [8 \( v* B$ ]9 v' W6 _, n! UInt32 input_sample(void)" M, H) H, W# n  E) V8 p
{  
: @. c! O2 X+ b) w8 L  AIC31_data.uint = MCASP1_RBUF0_32BIT;1 |" |& o7 U) }; D- x
  return (AIC31_data.uint);3 Y' w) V1 H2 d; w, a
}
9 s- H. N2 n5 v& H3 K
4 ], r3 G$ N6 r) q9 B! ^
分享到:  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-11-6 17:37 , Processed in 0.039722 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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