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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:; |6 |0 u, x% e4 |; A8 R' V
main文件:" n  z# c6 V, U" D# b* o  s
interrupt void interrupt4(void)  $ \' Y4 B' r! T' {. y8 a! I
{$ f, E3 J" C/ C! @. F+ W0 |
  Uint32 sample;
' U: M. F1 R; v7 H; o! O/ ?
; X8 |9 e4 d. y5 s- s, v: a  sample = input_sample(); // read L + R samples from ADC
9 i4 o# a# T  \6 @  output_sample(sample);   // write L + R samples to DAC + w' s9 {: ~8 g7 l- g9 c, u
  return;
3 y6 L3 N! w+ M5 i# D$ a: b}
" y( A3 T  s3 j( A4 G3 O  Y9 T& q8 t4 Q8 g
int main( void )
$ B2 l7 T) m' {  P{
7 Q' B# {8 [3 W1 X  a. u5 O# z; a' f5 F5 j" _0 w$ N6 l* U
    /* Initialize BSL */; L+ t0 O) y  O1 S7 f% \) t
    EVMC6747_init( );
' {" ~" k2 Y! e        /* Call evmc6747_intr function */
$ F' Q6 N- p0 R3 E    aic3106_init( );* ~+ T8 ?# _; n- B6 n
        while(1);. m& ~( S! \$ z3 w5 ^* n9 e
}
' I( M. D5 T6 Q' E" k
5 r, d9 s) C, S( m" Y' ?5 h
4 p" S) ]  e$ Y, c5 j* i$ Paic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
" |! f, |( |' H5 C' w- a$ m) C% A/* Initialize MCASP1 */
+ ]: Y" y; l$ m7 C6 c    mcasp = &MCASP_MODULE_1;- F: n# g0 n: Y
    mcasp->regs->GBLCTL  = 0;       // Reset- Y7 c  Z# M9 p# s
    mcasp->regs->RGBLCTL = 0;       // Reset RX
$ E) l/ {. H8 U- f    mcasp->regs->XGBLCTL = 0;       // Reset TX& Q2 v& D3 C4 `+ ~! v* S
    mcasp->regs->PWRDEMU = 1;       // Free-running
9 q7 E' c6 U: N% h! o3 R   // configure McASP0 receive registers
( l  `$ ~. O0 f; {2 w7 u, O    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used& G$ [. i* H% e4 z
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 D, e1 C0 S- o0 q    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
+ e7 `7 R" _- f  s# w& B" [! v: o    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)5 y" z% d# W* r# a: U# u# P3 v
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
6 ], `. \5 ?0 H    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
' |: Y/ K" F  L1 N, \2 Z    mcasp->regs->RINTCTL    = 0x00000000; // Not used! d' k1 x( O+ D. _0 t7 j4 J
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256/ B( R: r* P5 h" |  O/ u
& G9 ~2 c/ `0 k6 l) p* p
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used7 J8 k+ U8 y8 B& G; A) N( ~# \
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. U. Z6 r- Z: |0 ?/ q! ^
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
9 y; a* c. m+ o& J; t# {& [7 }    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16" P! c, j( S" Y
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK* z. U' ]7 _; I0 y4 E7 f% T1 c
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
/ c' r' Y2 ]0 f    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit* G& \2 r2 R- r8 U# [
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 `% j6 X8 f% @( T4 D
" j$ }1 n* }: J( C  H/ |    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN# K$ A5 J  l' G1 e
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
$ _- L$ k+ I5 {; a2 X    mcasp->regs->PFUNC      = 0;          // All MCASPs
( t3 Q8 D3 l, ^, r+ ^    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
2 ?0 r0 Y/ _+ y, t6 i& D3 t
9 W1 `6 U/ w, Z' c; r' i    mcasp->regs->DITCTL     = 0x00000000; // Not used
6 C; w( M' e" n% K. i    mcasp->regs->DLBCTL     = 0x00000000; // Not used
: V0 K! ?# r2 C# L7 \1 _; X8 q    mcasp->regs->AMUTE      = 0x00000000; // Not used
* T# z1 \" P5 q/ l# G! Z* R, i) q
/* Starting sections of the McASP*/) p( N! O6 F4 v% j$ ~* D& h/ G
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
6 V% U- S; p7 _) T+ V" w    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
- n  E( h$ t7 g    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
; K. |' X  ~* H! B    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
, V1 c$ q. Z- ]& m" j5 @& v4 x% h3 `- m% x$ f7 V& o' Z4 a
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
' c5 G; n$ b% ]7 o% z9 A% a  j    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
/ w/ |9 v4 p) p; r0 C1 l    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
( q* _$ A. J' z: j$ o  q. x    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );" n3 ~( ^2 O1 V3 S1 s
9 {# U& J2 O$ f
    mcasp->regs->XSTAT = 0x0000ffff; . H4 S7 r9 m' L; V# [3 |, q
    mcasp->regs->RSTAT = 0x0000ffff;
3 v2 Z8 A- n. n8 ?; o$ M0 i
  r  d% W# [# t9 [& w, M# ^. G    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
  B- ?( m: M- ^/ A* b    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
4 Z* f0 j- f, b' O- P' N, o' A; d    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
$ G0 N, Z( g+ x/ X    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );6 \7 W+ g4 A% l, t

: p0 j( H- U% j2 W/ o* E    /* Write a 0, so that no underrun occurs after releasing the state machine */7 }' b  [( f" b
    mcasp->regs->XBUF5 = 0;' U8 t9 H, b: e1 R) U2 Z; y2 H
    mcasp->regs->RBUF0 = 0;% ~  O3 q) x8 v5 H6 E

6 `9 q; @5 I4 u, E; y$ @. D    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
/ {1 W. u4 b/ N    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );2 R  `; N: Q: n" [  T
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 4 C+ q3 F4 s6 b( O. Q% t
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
* Z! W- q" P( J' Y/ V  T  {& X$ T' U: O3 _) m) f# x% ]3 `
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
" H$ Y* e; D# p- R    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
& s5 n4 |; n3 t) n, H4 x  y- q    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; % ~( j( h: M# S: ~
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
7 _) r; n, w$ _; @2 x, X0 s, H- k4 U# b" m) P
    CSR = 0x0000;( d  `' m: n9 A) Q. ?0 N
    INTC_INTMUX1 = 0x3d;
4 I1 v2 Z& C# }! x+ |; c5 w7 G  M    ISTP = (unsigned int)vectors;
* K9 a% e! @+ d0 h    ICR = 0xFFF0;  / c% x. }  f% g6 `* U2 F
    IER |= 0x12;  
7 c, \6 x3 z1 _; _) i1 @    CSR |= 0x01;  ! |2 G7 i0 Z+ W2 f, |7 b1 Y& J! x
# U( Y( H- A( |6 S

% q$ n4 W) D5 m. T4 s9 X0 h8 y. c4 y9 q2 P! [. }; s
还有就是两个输入输出函数:
* j7 z& M* i5 A# f! Fvoid output_sample(Int32 out_data)' J. A1 i3 N! i
{) r( g5 A* U5 Z- ^# n
  AIC31_data.uint = out_data;  
8 k7 t* y- c6 f$ n  MCASP1_XBUF5_32BIT = AIC31_data.uint;
" ^  B1 x: a$ H; J+ S' Z3 B}. V4 u& P* |2 o3 K1 y+ h# S

: q( @. S0 I8 d8 P! ?, d* l  r6 fInt32 input_sample(void). ^) r  v/ |9 q' B
{  % o; K: ^: B; U. k; v
  AIC31_data.uint = MCASP1_RBUF0_32BIT;) u9 i0 p. J* a, I
  return (AIC31_data.uint);4 D' U% C6 s7 T$ s0 C& c
}" X7 E! k  W# A" [$ F& V

, I$ [1 L, i2 u
分享到:  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-7 14:57 , Processed in 0.040486 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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