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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:6 _' b9 ~+ W4 R% F( }* o
main文件:
  b; W( G0 R) |2 i  C- n+ m1 Ninterrupt void interrupt4(void)  
8 R$ g$ G" c! x3 d{" W0 b% P# E; v
  Uint32 sample;" A& ~3 @4 K# u6 p( B

+ y* h( c4 d% X( [  sample = input_sample(); // read L + R samples from ADC
* `3 ~- s6 `8 R6 N6 W6 p7 F  output_sample(sample);   // write L + R samples to DAC
1 j2 s) ~8 r+ s7 h  return;% J) S2 f7 ?- o' r! N  G3 r8 Z5 W
}! {* j. V( R& b

% i$ H: b, Y! ]' O2 a6 Z7 k/ N$ Iint main( void )
1 h0 t1 y( i% s' s9 i% N# f0 h& T{
7 f7 U$ |$ F, M, T, c0 w4 ], Y: V' r
    /* Initialize BSL */0 H' B2 ^8 V3 W- I. y! E; P
    EVMC6747_init( );$ i+ D3 X  {) R
        /* Call evmc6747_intr function */
1 ^% f9 \0 n; L2 o$ [5 E    aic3106_init( );" [) i  k! z7 e) H
        while(1);
" F1 J5 j5 B* e& I" d}9 t6 F- e6 Q# X3 R- c& g& h
; ~- C+ X' W& A$ T- Z- e' H' {

: V; t- F! F7 u3 L( K7 I9 waic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
" S2 ^# W& i! J$ a. g9 N4 o* [/* Initialize MCASP1 */' X/ n" U, G! [
    mcasp = &MCASP_MODULE_1;
; y# v* q* X) X1 \    mcasp->regs->GBLCTL  = 0;       // Reset
  U; J& \% O7 S4 F# y    mcasp->regs->RGBLCTL = 0;       // Reset RX7 n- A! `: i+ y  V. K
    mcasp->regs->XGBLCTL = 0;       // Reset TX. V0 h9 l4 E, g5 T1 U' e
    mcasp->regs->PWRDEMU = 1;       // Free-running. \, n+ X' f9 J" C5 K- ^/ w( L6 o  t$ [
   // configure McASP0 receive registers6 R) h/ y: V0 {
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used" ~4 f& M6 G; p# a4 d2 E! k2 i
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
/ C0 k: w: K, ]) e    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
* w# c# Q5 @0 f  u7 J  h# N    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
) F" Q0 l5 m  h2 q. e    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)% z5 \" \! }- r. K( ~
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
" c; l4 }* T% F    mcasp->regs->RINTCTL    = 0x00000000; // Not used
, b  K; e5 c! R/ M    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
) c# ]- i* Q5 J* }; X( h
1 f# M  I0 u% }3 C1 i    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used+ k$ ?: {+ q: r* F0 X# Y+ n7 K
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
  i( R( k9 D. h- s5 s5 z% Y    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
! u" s1 ]' N7 {" e    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
( E6 F$ y) b# z& E7 ]3 j" d    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
8 W0 C% s9 {! O; I) d    mcasp->regs->XTDM       = 0x00000003; // Slots 0,15 g# M4 [8 Q! G' L' r+ T5 ~
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit3 E) e4 L' {4 C: t
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
" u0 E9 Q9 L4 a1 ^0 \$ @5 q; f( N7 ?
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN( O, k: K* n& z1 H" M: X# @1 n  p2 }
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT' l5 l- T5 ]: |2 L& v/ h6 G
    mcasp->regs->PFUNC      = 0;          // All MCASPs) R: ?5 }( {' t0 ]
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX13 C* n, t3 F+ i& x# D! Q7 t8 ~) o

2 \( ^  m4 p8 v4 y5 P    mcasp->regs->DITCTL     = 0x00000000; // Not used
+ Z& j% g+ B/ z* ]    mcasp->regs->DLBCTL     = 0x00000000; // Not used3 A/ E. C7 C/ g; r  t9 ]' U
    mcasp->regs->AMUTE      = 0x00000000; // Not used
! K& m) b. k+ p# }4 l* l. y+ ^. P# N0 X' |$ u. J4 Q* K5 S
/* Starting sections of the McASP*/  W9 b6 i# P1 w* S8 R; A
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ; O/ E( p& `) E/ P& `( e
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  0 _5 g3 J' B% P) q
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; : _- ]1 R% ~% Z. C
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
& |( s) |* ?! v' T8 N; X
/ E( y) J" c( L    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; / a2 U3 O8 j- K% t% ]/ V  p
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
6 m& u$ t. Z2 a5 J/ R/ f    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
0 `3 v. Q' A9 o" P) M4 D. ~    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );1 c2 Y+ ^) g! Y6 h! v

! Z' [& _1 N3 `; _( k    mcasp->regs->XSTAT = 0x0000ffff;
( H; X3 Z- L0 x    mcasp->regs->RSTAT = 0x0000ffff;
# o  p2 D# u% K( t( I! l, ^6 X$ ^" C5 y
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;( d+ p! Y( O  S
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );% H( q* w2 d3 I* r
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
, c) H9 ?" Y5 O$ s( L+ u    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );# V- Y6 P* Y: N4 ]
% W$ \$ @0 |2 _; F8 a3 C  S  F
    /* Write a 0, so that no underrun occurs after releasing the state machine */
0 a2 S& @- f! j  l1 Q( h    mcasp->regs->XBUF5 = 0;4 y5 ^2 A- @# i8 n6 M0 m
    mcasp->regs->RBUF0 = 0;; ^1 X* }4 @0 T
/ C- K3 u0 i+ a3 s5 X( t% Q; B
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
9 Z  ]( L& X/ v- [+ U) \    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );2 R/ x4 P6 G" T3 i$ }& H! L
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 9 n& N# P6 t  [, b3 w6 g
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );" L4 O3 W+ U9 s' Q( n* o

  T, N4 C4 L  `    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
' {, M5 S5 C/ Q- h2 c' G. u    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
( t# T2 p9 j$ e7 s# i; B    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
! G' b7 l. N( v8 ~    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );4 }# P9 R2 ]* f2 @

: J" E6 O& s# b" e    CSR = 0x0000;
8 ^* [7 }. f, I0 H! w    INTC_INTMUX1 = 0x3d;
& Z( f) W% m) o# t3 {    ISTP = (unsigned int)vectors;2 j' I' `/ p3 ?# a2 u
    ICR = 0xFFF0;  & G% [1 K5 `( S
    IER |= 0x12;  
% \' J1 E& U0 ^. J: y+ a3 y3 w    CSR |= 0x01;  
- P: U( W& A- c4 H5 }# r
; [0 F3 n) \1 i- w$ [* }1 E, `  X/ u9 h9 U

7 D+ G% p+ K- H- V3 k还有就是两个输入输出函数:
* G2 t# t! @% Jvoid output_sample(Int32 out_data)
9 J8 ]6 k$ t- n" P8 A1 [! d. ^* E{# @  C! O( _2 c8 c1 d/ T: \4 L4 S# y
  AIC31_data.uint = out_data;  * f' C: Y5 d* M3 _  C0 l5 a
  MCASP1_XBUF5_32BIT = AIC31_data.uint;) g- L3 x0 b0 N7 G
}
, p- H8 ?/ ?/ `4 [( t: F3 Q4 i5 G$ I* G; ]( U+ |- R: R
Int32 input_sample(void)6 z0 {9 C- b! \' p
{  
0 A+ w2 [0 n8 \3 D  AIC31_data.uint = MCASP1_RBUF0_32BIT;9 u6 w  Z9 {, k
  return (AIC31_data.uint);$ J; Y6 Y2 |( `) h3 S: v
}4 Y4 L3 T) |9 S

- b4 g! J/ g- c6 i5 @
分享到:  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-2-15 19:05 , Processed in 0.041125 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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