C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
* t: |5 j' d, }+ o8 ?main文件:
* [5 N. F9 I( B8 ?5 kinterrupt void interrupt4(void)  8 y- B  S/ o. r) o, U. e, k( j
{$ _8 E- y: @: C  S
  Uint32 sample;
3 i2 n4 ^, m7 U% ]
8 V  B# \/ o- y) H7 O  sample = input_sample(); // read L + R samples from ADC
! b$ T7 O$ J5 H8 V  output_sample(sample);   // write L + R samples to DAC
$ `  S8 {% [( ~: o8 b% j  return;9 f9 u/ t- s4 _( r2 _- E
}! w# }! M( W  Y9 G) f

) L# y8 a, S! F9 f- U% i1 a; fint main( void )8 g4 G. `) P* g8 ?1 [1 F
{
5 f; I4 o; a) O( u3 j9 e9 o# m
* O. Q. J, e* ?  p& y' e    /* Initialize BSL */
# p6 D! @' R' M7 W) F4 [    EVMC6747_init( );" c* e" j9 ?9 g! n) r* i5 e
        /* Call evmc6747_intr function */, d  b7 O% G  B' ^" T  K+ |1 y+ q
    aic3106_init( );
* z- D* N! ^0 Y/ P6 ~. {3 U- V; u        while(1);4 v$ q5 T. T3 q: u) I- d5 e
}# W* h" `0 d: }3 q7 {, ]# O+ W
. M6 E, ^" F8 p- l; j6 I# H$ n
9 F6 N& Y1 ], f9 d& @
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
# M0 y3 a3 ^1 k( A/* Initialize MCASP1 */9 V4 O% v1 Z- Z" j* ?% i
    mcasp = &MCASP_MODULE_1;7 R+ C7 N3 K& r" H0 I3 m* d, r
    mcasp->regs->GBLCTL  = 0;       // Reset
5 u7 d* s0 D6 s- q! ]    mcasp->regs->RGBLCTL = 0;       // Reset RX
% O' t1 E+ n' L1 E* M/ X. l# p    mcasp->regs->XGBLCTL = 0;       // Reset TX
- h2 n* }7 `# {  N4 X    mcasp->regs->PWRDEMU = 1;       // Free-running
& m9 H- H3 X  E, O8 U   // configure McASP0 receive registers
% w8 Z% N4 n0 ~6 G+ p9 o5 p    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used& U5 J" _1 q9 P) A; Q% |
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus4 {8 G: X% |' S5 H; I
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
3 w5 g1 m6 w4 d& h6 ]; I7 m. h1 I$ z    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
6 ]& y5 o& ~* A9 B1 J* y    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)5 f' u9 t7 N4 h) |  _" U5 [3 P
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1! U2 x% M/ ^; C* r% w
    mcasp->regs->RINTCTL    = 0x00000000; // Not used) |) \) _9 j6 ~" ?- u
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 ^& n1 c6 R/ q* d+ M

$ i6 |! b! Q% y; r  b: R' B    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used% n7 i; b# b# A- I4 f
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 v; J8 `7 [  h: Y$ W3 x; s    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word: c+ i2 E/ n1 ?2 \
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
  j: w  A+ C$ V3 H& s    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
$ Y0 ], g' a3 c8 a    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
5 F/ x/ p3 w6 ]6 _+ `+ b5 Y    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit% V. G, S1 ]- ?) a& N
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 U  _# s+ E! a
, A5 i4 o' J4 m  n9 j" G$ g+ e    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
! q* ]( i1 P" I$ K$ a    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
: a- Z2 B9 f: i+ {    mcasp->regs->PFUNC      = 0;          // All MCASPs- k" _3 J9 m( C5 P2 j" e
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
( o2 ^0 v6 K7 `& Q7 U8 V; C+ |; I! T7 S* T7 A- L
    mcasp->regs->DITCTL     = 0x00000000; // Not used
4 q2 v$ S" B9 b/ n4 E" {. @    mcasp->regs->DLBCTL     = 0x00000000; // Not used
1 a1 Z5 @7 P; P( L    mcasp->regs->AMUTE      = 0x00000000; // Not used
" z3 s# A& g% a/ [7 T! M7 Z# G# X+ Y2 i: z5 P0 P9 v; g! a
/* Starting sections of the McASP*/
$ Y% x" T( _0 H    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 7 a4 t4 a$ X$ m! T" O& _
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  & Q4 W, S% v& L- W7 C% S  P  O- Q: g
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
- o2 _$ ?, q( i' m& v3 `    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );. u9 s5 O; @  }$ i
/ K. f2 y$ X1 D1 N8 y& @! W0 L
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; : ~5 Z. y2 A- t! Y9 q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );3 t5 t7 Q1 |4 u% B5 a
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ) V; |& [0 S7 Z% |
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
2 |1 w+ p1 m6 P1 z0 k: C5 _) ^+ w4 W) ]$ R8 @* u. ~
    mcasp->regs->XSTAT = 0x0000ffff;
6 h" F0 E  g6 }; G! W" x    mcasp->regs->RSTAT = 0x0000ffff;
! n  k/ O( e9 L3 t$ ^9 c- a( e
" }, K9 h8 h2 \0 q# K" g    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;. _2 r) ~" U3 t% t) X
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
+ U6 ?6 L! N! T1 Y, B" q+ b    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; - @0 u5 e2 E' o- [
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );4 W0 F& f$ f6 m# R! Y

$ W0 k4 e/ T2 y: B7 x. I' }% J8 p    /* Write a 0, so that no underrun occurs after releasing the state machine */
: y; C! P$ ?2 K8 ?8 f& T9 U- ~    mcasp->regs->XBUF5 = 0;
3 L; ~% n) Z& k) o9 Z3 x) T    mcasp->regs->RBUF0 = 0;
  m0 x. E+ b' E; P! R" W: X6 \$ a3 S  o) }
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
6 G' j3 |. n, A2 e% ^    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
, ^' v2 p4 }4 f* C$ F! P    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
$ P, w7 a+ r- Q5 _& o% `& M% R! r' a    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );' R' v9 Y- F; {- w+ c! a" h! |% h8 j

, Q- N5 D7 d( W9 S, \, D    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
- C, ~- S- s; J9 p    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
' P- I0 b/ l! g, @& C' e    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; / G. H6 `4 j8 X- K
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );6 u8 u+ S, p6 J7 C$ T* ?% x

% u4 ^' ]2 d8 G    CSR = 0x0000;
+ ]7 A- j2 `( H+ c, c* x- f, ?6 D    INTC_INTMUX1 = 0x3d;
+ B  X. }* n' W# i0 v    ISTP = (unsigned int)vectors;! ]; d: y% W4 \) F/ X
    ICR = 0xFFF0;  
+ {. R* k" B8 @1 E$ Y  j    IER |= 0x12;  9 U; Y/ O# [4 _" l
    CSR |= 0x01;  
5 ~9 F$ N' E0 P* p0 j' ?/ _% x& K0 B& u# ^  E( o

/ S; K' ~! g3 S. x4 y. R
6 V. @: T- y4 H' E6 t/ c, y4 c' \还有就是两个输入输出函数:
) g3 H. u, J3 ^$ Kvoid output_sample(Int32 out_data)5 P* ]) C1 G+ J) u3 ?
{' k1 o7 O! Y" j1 x, g1 I/ j  d
  AIC31_data.uint = out_data;  
0 ]& e0 Y; l( e  MCASP1_XBUF5_32BIT = AIC31_data.uint;5 }% h, [1 G  G" |5 {
}3 t" |7 |! Y" r  s! y: m3 u

6 j/ Y; X" {/ nInt32 input_sample(void)$ u8 V6 V+ y( l
{  
3 C( J1 N  B  G9 g' o1 |  AIC31_data.uint = MCASP1_RBUF0_32BIT;
/ j+ R7 r% M$ k+ k( `4 t- C  ~  return (AIC31_data.uint);
7 x* Z' L0 H5 ^}
0 [% s# b# p: @, Y+ j+ v, P, q) Y1 O# a$ j1 n8 f/ [
分享到:  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, 2026-3-31 23:14 , Processed in 0.041994 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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